首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将两个变量传递给'foreach‘循环

将两个变量传递给'foreach‘循环
EN

Stack Overflow用户
提问于 2015-10-05 13:32:22
回答 6查看 21K关注 0票数 19

我需要关于foreach()循环的帮助。我将两个变量传递到一个foreach循环中?

例如,

代码语言:javascript
复制
foreach($specs as $name, $material as $mat)
{
    echo $name;
    echo $mat;
}

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

分析错误:语法错误,在foreach行上出现意外的',',应为')‘。

EN

回答 6

Stack Overflow用户

发布于 2015-10-05 13:42:52

在一开始,是For循环:

代码语言:javascript
复制
$n = sizeof($name);
for ($i=0; i < $n; $i++) {
   echo $name[$i];
   echo $mat[$i];
}
票数 27
EN

Stack Overflow用户

发布于 2015-10-05 13:34:25

您不能在这样的foreach循环中有两个数组,但您可以使用array_combine组合一个数组,稍后只需将其打印出来:

代码语言:javascript
复制
$arraye = array_combine($name, $material);

foreach ($arraye as $k=> $a) {
     echo $k. ' '. $a ;
}

代码语言:javascript
复制
first 112
second 332

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

代码语言:javascript
复制
$name = array('amy','john','morris','rahul');
$material = array('1w','4fr',null,'ff');

现在你只需要

代码语言:javascript
复制
if (count($name) == count($material)) {
    for ($i=0; $i < $count($name); $i++) {
        echo $name[$i];
        echo $material[$i];
 }

仅供参考:如果您想在foreach中使用多个数组,可以使用list

代码语言:javascript
复制
foreach ($array as list($arr1, $arr2)) {...}

不过,首先需要做的是:$array = array($specs,$material)

代码语言:javascript
复制
<?php
    $abc = array('first','second');
    $add = array('112','332');
    $array = array($abc,$add);

    foreach ($array as list($arr1, $arr2)) {
         echo $arr1;
         echo $arr2;
    }

输出将为:

代码语言:javascript
复制
first
second
112
332

我仍然认为它不会达到你的确切目的,因为它先经过第一个数组,然后再经过第二个数组。

票数 14
EN

Stack Overflow用户

发布于 2015-10-05 14:50:18

您可以使用SPL的MultipleIterator。对于这个简单的用例,它有点冗长,但在所有边缘用例中都很好用:

代码语言:javascript
复制
$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中找到。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32941855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档