使用foreach循环将数组的值合并为一个新的关联数组

3

我正在使用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”组合在一起。

我不知道接下来该做什么,请帮我完成。

3个回答

1
我认为array_combine只会获取唯一的值。
无论如何,为什么不这样做呢?只需使用foreach循环遍历$lists as $index => $listitem,然后在foreach循环中添加$due = $assigndue[$index]即可。如果我正确理解了您的程序逻辑,那么它应该可以正常工作。
还有一件需要提到的事情是优化。您不应该对每个插入到数据库的查询进行多次查询。只需将它们组合成以下格式的单个执行语句: INSERT INTO todolist (COLUMNS) VALUES (ATTRIBUTE), (ATTRIBUTE) 通过将插入值子句设置为数组,然后在查询中使用join(ARRAY)来生成值子句。
如果您需要详细帮助,请询问。

0

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);
}

请确保两个数组具有相同的大小。


0

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

与其使用 array_combine,不如考虑使用 SPL 的 MultipleIterator:

$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 = ....
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接