array_combine在foreach循环中组合数组值

时间:2014-08-11 07:18:16

标签: php arrays foreach

我正在为数组使用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') 

它结合了'在阵列中。

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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

将insert value子句设为ARRAY,然后将join(ARRAY)用于查询中的values子句。

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

答案 1 :(得分:0)

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

但是,自己迭代这两个数组应该没问题:

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

请确保两个阵列的大小相同。

答案 2 :(得分:0)

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

不要使用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&gt; = 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 = ....
}