我想对3个变量使用foreach函数
我在我的页面中使用此代码:
foreach (array_combine($online_order_name, $online_order_q) as $online_order_name1 =>
$online_order_q1) {
mysql_query("insert into .......
}
我怎么能这样做:
<?
foreach (array_combine($online_order_name, $online_order_q,$third_variable) as
$online_order_name1 => $online_order_q1 => $third_variable2) {
?>
谢谢
答案 0 :(得分:5)
我想这可以解决你的需求:
<?php
$A=array(1,2,3);
$B=array('a','b','c');
$C=array('x','y','z');
foreach (array_map(NULL, $A, $B, $C) as $x) {
list($a, $b, $c) = $x;
echo "$a $b $c\n";
}
答案 1 :(得分:1)
foreach
只对一个迭代器进行迭代,并提供一个键和一个值。这就是PHP中定义迭代器的方式。
在你的问题中你写道你需要多个值(但不是键,但我认为这不会有害)。这不是开箱即用的。
但是,您可以创建一个迭代器,允许您一次迭代多个迭代器。基类附带PHP,称为MultipleIterator
。然后,您可以创建自己的ForEachMultipleArrayIterator
,以便每次迭代轻松指定多个键和值:
$a = array(1,2,3);
$b = array('b0' => 'a', 'b1' => 'b', 'b2' => 'c');
$c = array('c0' => 'x', 'c1' => 'y', 'c2' => 'z');
$it = new ForEachMultipleArrayIterator(
// array keyvar valuevar
array($a, 'akey' => 'avalue'),
array($b, 'bkey' => 'bvalue'),
array($c, 'ckey' => 'cvalue')
);
foreach($it as $vars)
{
extract($vars);
echo "$akey=$avalue, $bkey=$bvalue and $ckey=$cvalue \n";
}
class ForEachMultipleArrayIterator extends MultipleIterator
{
private $vars;
public function __construct()
{
parent::__construct();
$arrays = func_get_args();
foreach($arrays as $set)
{
if (count($set) != 2)
throw new invalidArgumentException('Not well defined.');
$array = array_shift($set);
if (!is_array($array))
throw new InvalidArgumentException('Not an array.');
$this->vars[key($set)] = current($set);
parent::attachIterator(new ArrayIterator($array));
}
}
public function current()
{
return array_combine(array_keys($this->vars), parent::key())
+ array_combine($this->vars, parent::current());
}
}
Demo - 但如果你走得那么远,我很清楚很明显,通过实际迭代其他东西,你想要做的事情可以更轻松地解决。上面的示例基本上与:
相同foreach(array_map(NULL, array_keys($a), $a, array_keys($b), $b, array_keys($c), $c) as $v)
{
list($akey, $avalue, $bkey, $bvalue, $ckey, $cvalue) = $v;
echo "$akey=$avalue, $bkey=$bvalue and $ckey=$cvalue \n";
}
所以最好让你的数组按顺序排列然后处理它们:)
答案 2 :(得分:0)
我认为array_combine
和foreach
无法做到这一点,因为它们专门针对关联数组中的键/值对进行操作。 PHP没有元组作为内置数据结构。
答案 3 :(得分:0)
for ($i = 0, $length = count($array1); $i < $length; $i++) {
list($a, $b, $c) = array($array1[$i], $array2[$i], $array3[$i]);
...
}
您应该考虑更好的数组结构,但不要求您从三个不同的数组中提取信息。类似的东西:
$orders = array(
array('name' => 'Foo', 'q' => 'bar', 'third' => 'Baz'),
...
);