【问题标题】:array_combine combine array values in foreach looparray_combine 在 foreach 循环中组合数组值
【发布时间】:2014-08-11 07:18:15
【问题描述】:

我正在对数组使用 foreach 循环。

我有两组数组

我想从一个 foreach 循环中传递这两个数组 代码:

//getting variables from form
$lists=$_POST['list'];
$assigndue=$_POST['assign'];

//foreach loop
foreach (array_combine($lists,$assigndue) as $listitem => $due)
{
 $qqu="INSERT INTO `todolist`(`todoid`,`listdetail`,`assign`,`order`)VALUES('$todoidd','$listitem','$due','$o')";
        $ins=mysql_query($qqu);
}

一切正常,但是当数组像这样时我遇到了问题>>

Array
(
    [0] => s
    [1] => s
    [2] => s
    [3] => a
)

它返回这个查询

INSERT INTO `todolist`(`todoid`,`listdetail`,`assign`,`order`)VALUES('8','s','Select Email','1') 

INSERT INTO `todolist`(`todoid`,`listdetail`,`assign`,`order`)VALUES('8','a','Select Email','2') 

它结合了数组中的's'。

我不知道下一步该怎么做,请帮我做。

【问题讨论】:

    标签: php arrays foreach


    【解决方案1】:

    我认为 array_combine 只会获得唯一的价值。

    为什么你不必把它结合起来呢?只是foreach$lists as $index => $listitem 然后在foreach 循环中,添加$due = $assigndue[$index] 如果我正确理解您的程序逻辑,它将正常工作。

    需要提及的另一件事是关于优化。 您不应该对每个插入数据库进行多次查询。 只需按照以下格式将它们组合到单个执行中,

    INSERT INTO todolist (COLUMNS) VALUES (ATTRIBUTE), (ATTRIBUTE)

    通过将插入值子句设置为 ARRAY,然后将 join(ARRAY) 用于查询中的值子句。

    如果您需要任何详细帮助,请询问。

    【讨论】:

      【解决方案2】:

      由于array_combine 将使用第一个数组的元素作为结果数组的键,并且由于键必须是唯一的,因此如果$lists 中有多个相同的元素,则不能使用array_combine

      不过自己遍历两个数组应该没问题:

      //getting variables from form
      $lists=$_POST['list'];
      $assigndue=$_POST['assign'];
      
      //for loop
      for ($i = 0; $i < count($lists) && $i < count($assigndue); $i++)
      {
       $qqu="INSERT INTO `todolist`(`todoid`,`listdetail`,`assign`,`order`)VALUES('$todoidd','" . $lists[$i] . "','" . $assigndue[$i] . "','$o')";
              $ins=mysql_query($qqu);
      }
      

      只要确保两个数组的大小相同。

      【讨论】:

        【解决方案3】:

        数组键必须是唯一的,因此将 s、s、s 作为键传递给 array_combine 只会给您 s 和 a 条目

        考虑使用 SPL 的 MultipleIterator,而不是使用 array_combine:

        $mi = new MultipleIterator(MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_ASSOC);
        $mi->attachIterator(new ArrayIterator($lists), 'listitem');
        $mi->attachIterator(new ArrayIterator($assigndue), 'due');
        foreach($mi as $details) {
            extract($details);
            $qqu = ....
        }
        

        或者如果您使用的是 PHP >= 5.5

        $mi = new MultipleIterator(MultipleIterator::MIT_NEED_ALL | MultipleIterator::MIT_KEYS_ASSOC);
        $mi->attachIterator(new ArrayIterator($lists));
        $mi->attachIterator(new ArrayIterator($assigndue));
        foreach($mi as list($listitem, $due)) {
            $qqu = ....
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-03
          相关资源
          最近更新 更多