我需要有关foreach()
循环的帮助。 a我可以将两个变量传递给一个foreach
循环吗?
例如,
foreach($specs as $name, $material as $mat)
{
echo $name;
echo $mat;
}
在这里,$specs
和$material
只是一个数组,我在其中存储一些规格和材料名称,并希望逐个打印它们。运行后我收到以下错误:
解析错误:语法错误,意外',',期待')'在foreach行。
答案 0 :(得分:26)
在开始时,是For循环:
$n = sizeof($name);
for ($i=0; i < $n; $i++) {
echo $name[$i];
echo $mat[$i];
}
答案 1 :(得分:14)
你不能在foreach
循环中拥有两个数组,但你可以使用array_combine
组合一个数组,然后将其打印出来:
$arraye = array_combine($name, $material);
foreach ($arraye as $k=> $a) {
echo $k. ' '. $a ;
}
first 112
second 332
但是如果任何名称没有材料,那么你必须有一个空/空值,否则你无法确定哪个材料属于哪个名称。所以我认为你应该有一个像:
这样的数组$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
但我仍然不认为它会满足您的确切目的,因为它会通过第一个数组,然后是第二个数组。
答案 2 :(得分:11)
您可以使用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];
}
迭代器的默认设置是,只要其中一个数组没有更多元素就停止,并且可以按照迭代器附加的顺序使用数字键访问当前元素({{1 }和$current[0]
)。
答案 3 :(得分:3)
这是实现此目的的方法之一:
foreach ($specs as $k => $name) {
assert(isset($material[$k]));
$mat = $material[$k];
}
如果您有['foo', 'bar']
和[2 => 'mat1', 3 => 'mat2']
,则此方法无法正常工作,但您可以先使用array_values
来放弃密钥。
另一个应用程序(实际上非常接近你想要的):
while ((list($name) = each($specs)) && (list($mat) = each($material))) {
}
这将在其中一个结束时终止,并且如果它们没有被索引相同则将起作用。但是,如果它们应该被索引相同,那么上面的解决方案可能更好。很难说一般。
答案 4 :(得分:2)
使用for
循环...
检查以下内容:
<?php
$specs = array('a', 'b', 'c', 'd');
$material = array('x', 'y', 'z');
$count = count($specs) > count($material) ? count($specs) : count($material);
for ($i=0;$i<$count;$i++ )
{
if (isset($specs[$i]))
echo $specs[$i];
if (isset($material[$i]))
echo $material[$i];
}
?>
<强>输出强>
axbyczd
答案 5 :(得分:-1)
只需使用for
循环即可。在该循环中,提取数组的值:
For (I=0 to 100) {
Echo array1[i];
Echo array2[i]
}