我需要关于foreach()
循环的帮助。我将两个变量传递到一个foreach
循环中?
例如,
foreach($specs as $name, $material as $mat)
{
echo $name;
echo $mat;
}
在这里,$specs
和$material
只是一个数组,我在其中存储了一些规格和材料名称,并希望逐个打印它们。运行后,我得到以下错误:
分析错误:语法错误,在foreach行上出现意外的',',应为')‘。
发布于 2015-10-05 13:42:52
在一开始,是For循环:
$n = sizeof($name);
for ($i=0; i < $n; $i++) {
echo $name[$i];
echo $mat[$i];
}
发布于 2015-10-05 13:34:25
您不能在这样的foreach
循环中有两个数组,但您可以使用array_combine
组合一个数组,稍后只需将其打印出来:
$arraye = array_combine($name, $material);
foreach ($arraye as $k=> $a) {
echo $k. ' '. $a ;
}
first 112
second 332
但是如果其中任何一个名称没有material,那么您必须在其中包含一个空/null值,否则您无法确定哪个材质属于哪个名称。所以我认为你应该有一个像这样的数组:
$name = array('amy','john','morris','rahul');
$material = array('1w','4fr',null,'ff');
现在你只需要
if (count($name) == count($material)) {
for ($i=0; $i < $count($name); $i++) {
echo $name[$i];
echo $material[$i];
}
仅供参考:如果您想在foreach
中使用多个数组,可以使用list
foreach ($array as list($arr1, $arr2)) {...}
不过,首先需要做的是:$array = array($specs,$material)
<?php
$abc = array('first','second');
$add = array('112','332');
$array = array($abc,$add);
foreach ($array as list($arr1, $arr2)) {
echo $arr1;
echo $arr2;
}
输出将为:
first
second
112
332
我仍然认为它不会达到你的确切目的,因为它先经过第一个数组,然后再经过第二个数组。
发布于 2015-10-05 14:50:18
您可以使用SPL的MultipleIterator
。对于这个简单的用例,它有点冗长,但在所有边缘用例中都很好用:
$iterator = new MultipleIterator();
$iterator->attachIterator(new ArrayIterator($specs));
$iterator->attachIterator(new ArrayIterator($material));
foreach ($iterator as $current) {
$name = $current[0];
$mat = $current[1];
}
迭代器的默认设置是,只要其中一个数组没有更多的元素,它就会停止,并且您可以按迭代器附加的顺序($current[0]
和$current[1]
)使用数字键访问当前元素。
不同设置的示例可以在constructor documentation中找到。
https://stackoverflow.com/questions/32941855
复制相似问题