【问题标题】:PHP, "Foreach" using 3 arrays [duplicate]PHP,“Foreach”使用3个数组[重复]
【发布时间】:2012-12-28 14:31:44
【问题描述】:

可能重复:
foreach with three variables add

如果我有 3 个相同大小的数组,是否可以使用 costruct foreach() 来同时循环 3 个数组?

例如

$name contains names

$surname contains surnames

$address contains addresses.

foreach 可以同时取元素 [1], [2], [.....] 进行打印

$name[1], $surname[1], $address[1];

$name[2], $surname[2], $address[2];

等等?

【问题讨论】:

  • 请为童话代码(或示例代码)明智地选择变量名,$1 不是有效的变量名:)

标签: php arrays foreach


【解决方案1】:

SPL 的 multipleIterator 正是为此目的而设计的

$mi = new MultipleIterator();
$mi->attachIterator(new ArrayIterator($array1));
$mi->attachIterator(new ArrayIterator($array2));
$mi->attachIterator(new ArrayIterator($array3));

foreach ( $mi as $value ) {
    list($name, $surname, $address) = $value;
    echo $name , ' => ' , $surname , ' => ' , $address , PHP_EOL;
}

【讨论】:

  • 不错。这会自动处理数组不包含相同数量元素的情况吗?
  • 我对同样的问题感兴趣。顺便说一句,谢谢,这似乎是我正在寻找的。​​span>
  • 可能不是,因为列表结构。如果其中一个数组有两个索引,我相信它会失败。
  • 您可以更改MultipleIterator 构造函数并传入MultipleIterator::MIT_NEED_ANY,这将导致对数组中最长的每个元素执行循环。默认值为MultipleIterator::MIT_NEED_ALL,它只会在每个数组在当前槽中有一个元素时运行。
  • 看看数组构造函数的可选标志 - php.net/manual/en/multipleiterator.construct.php = 它显示了如何通过数字或关联索引匹配数组
【解决方案2】:

假设它们的长度都相同:

for ($i = 0; $i < count($names); $i++) {
    echo "{$names[$i]}, {$surnames[$i]}, {$addresses[$i]}";
}

【讨论】:

  • 我更喜欢使用 foreach 以获得更高的安全性
  • ... 使用 foreach 如何提供更高的安全性?.....
  • 嗯,根据 php.net,f​​oreach 是用来与数组一起使用的......
  • 哎呀。好的。祝你好运。
  • 是的,但是使用 for 循环和访问数组的索引功能相同,而且速度更快。
【解决方案3】:

你可以这样做(如果数组有相同的键):

foreach ($name as $key => $value) {
    //use $name[$key], $surname[$key], $address[$key]
}

$key 包含 $name 数组中的键

$value = $name[$key]

【讨论】:

  • 什么是 $value?我试图阅读 php.net 文档,但我无法理解那部分。
  • 请再看答案。
  • 哦,谢谢,第一次没有:P
【解决方案4】:

试试这个

foreach($arr1 as $i => $val) {
    var_dump($val, $arr2[$i], $arr3[$i]);
}

【讨论】:

    【解决方案5】:

    如果数组键相同,可以使用key()函数。

    但是您可以将密钥传递给foreach($array as $key =&gt; value()){} 这样你可以通过变量引用键而不使用函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-28
      • 2018-03-01
      相关资源
      最近更新 更多