我正在为数组使用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')
它结合了'在阵列中。
我不知道下一步该怎么做请帮我做。
答案 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 = ....
}