将两个变量传递到'foreach'循环中

时间:2015-10-05 05:32:22

标签: php arrays foreach

我需要有关foreach()循环的帮助。 a我可以将两个变量传递给一个foreach循环吗?

例如,

foreach($specs as $name, $material as $mat)
{
    echo $name;
    echo $mat;
}

在这里,$specs$material只是一个数组,我在其中存储一些规格和材料名称,并希望逐个打印它们。运行后我收到以下错误:

  

解析错误:语法错误,意外',',期待')'在foreach行。

6 个答案:

答案 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 ;
}

Output

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])。

可以在constructor documentation

中找到不同设置的示例

答案 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]
}