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

Man*_*hra 18 php arrays foreach

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

例如,

foreach($specs as $name, $material as $mat)
{
    echo $name;
    echo $mat;
}
Run Code Online (Sandbox Code Playgroud)

在这里,$specs并且$material都不过是在我存储一些规范和材料名称和要打印逐一的数组.运行后我收到以下错误:

解析错误:foreach行上的语法错误,意外',',期待')'.

pau*_*sm4 26

在开头,是For循环:

$n = sizeof($name);
for ($i=0; i < $n; $i++) {
   echo $name[$i];
   echo $mat[$i];
}
Run Code Online (Sandbox Code Playgroud)

  • 这是执行操作的方式(我认为),但是,应该注意检查$ name和$ mat是否具有相同数量的元素.没有人喜欢IndexOutOfBounds异常.我不熟悉php中的确切语法(几年后没有使用它),但我可以建议将其添加到您的代码中吗? (6认同)

Nul*_*teя 14

你不能在这样的foreach循环中有两个数组,但你可以使用array_combine来组合一个数组,然后将它打印出来:

$arraye = array_combine($name, $material);

foreach ($arraye as $k=> $a) {
     echo $k. ' '. $a ;
}
Run Code Online (Sandbox Code Playgroud)

产量:

first 112
second 332
Run Code Online (Sandbox Code Playgroud)

但是,如果任何名称没有材料,那么您必须在其中包含空/空值,否则您无法确定哪个材料属于哪个名称.所以我认为你应该有一个像这样的数组:

$name = array('amy','john','morris','rahul');
$material = array('1w','4fr',null,'ff');
Run Code Online (Sandbox Code Playgroud)

现在你可以

if (count($name) == count($material)) {
    for ($i=0; $i < $count($name); $i++) {
        echo $name[$i];
        echo $material[$i];
 }
Run Code Online (Sandbox Code Playgroud)

仅供参考:如果您想拥有多个阵列foreach,可以使用list:

foreach ($array as list($arr1, $arr2)) {...}
Run Code Online (Sandbox Code Playgroud)

虽然首先你需要这样做: $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;
    }
Run Code Online (Sandbox Code Playgroud)

输出将是:

first
second
112
332
Run Code Online (Sandbox Code Playgroud)

而且我仍然认为它不会满足您的确切目的,因为它会通过第一个数组然后是第二个数组.


Fab*_*ler 11

您可以使用MultipleIteratorSPL.这个简单的用例有点冗长,但适用于所有边缘情况:

$iterator = new MultipleIterator();
$iterator->attachIterator(new ArrayIterator($specs));
$iterator->attachIterator(new ArrayIterator($material));
foreach ($iterator as $current) {
    $name = $current[0];
    $mat  = $current[1];
}
Run Code Online (Sandbox Code Playgroud)

迭代器的默认设置是,只要其中一个数组没有更多元素就可以停止,并且可以按照迭代器附加($current[0]$current[1])的顺序使用数字键访问当前元素.

可以在构造函数文档中找到不同设置的示例.