PHP:迭代两个并行数组的最佳方法是什么?

问题描述:

如看到in this other answer,有几种方法可以同时迭代两个相同大小的数组;然而,所有这些方法都有相当大的缺陷。以下是一些提示方法的注意事项:PHP:迭代两个并行数组的最佳方法是什么?

  • 您不能在其中一个数组中使用FALSE值。
  • 您只能在其中一个数组中使用标量值。
  • 您必须使用数字索引的数组。
  • 两个阵列必须共享相同的密钥。
  • 等等

我的问题是 - 是有这样做不从这些(或其他)显著警告遭受的方法?

请记住,我只是出于好奇而问这个问题;我没有考虑用例,也不知道这种情况是否真实存在,或者在现实世界中是否有用/实用。然而,这里是一些示例数据:

$arr1 = [ 'a' => 1, 'b' => FALSE, 'c' => new DateTime() ]; 
$arr2 = [ 'foo', TRUE, 7 ]; 
+0

这有什么错beefsack的问题的答案?似乎它会工作,无论数组的内容或结构如何。 – nickb 2012-04-12 21:44:11

+0

它不会起作用,因为''b'=> FALSE' @nickb – Baba 2012-04-12 21:53:43

+0

@Baba - 不,[它适用于''b'=> false'](http://codepad.viper-7.com/nNZuNj )。 – nickb 2012-04-13 13:10:57

您可以使用MultipleIterator

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

foreach ($iterator as $values) { 
    var_dump($values[0], $values[1]); 
} 

你可以找到有关的各种选项in the docs更多的例子。

+0

很干净。 +1 :) – AlienWebguy 2012-04-12 22:27:58

+0

+1我知道必须有更好的方法。感谢您教我的东西:-) – FtDRbwLXw6 2012-04-13 00:06:08

<?php 

$arr1 = array('a' => 1, 'b' => FALSE, 'c' => new DateTime()); 
$arr2 = array('foo', TRUE, 7, 5); 


reset($arr1); 
reset($arr2);  

while ((list($key, $val) = each($arr1)) 
    && (list($key2, $val2) = each($arr2)) 
) { 
    var_dump($val,$val2); 
    // or whatever you wanted to do with them 
} 

http://www.php.net/manual/en/function.each.php

+1

你的脚本有错误,如果总数组在'$ arr2'>'$ arr1' ...在他们开始投票之前纠正它,你会失败 – Baba 2012-04-12 21:59:44

+0

@Baba我找到一台服务器测试,因为我第一次没有真正测试它。这并不是数组长度的问题(从我所知道的情况来看),但是存在一些问题(比如我在测试的服务器上没有5.4),所以感谢您指出了这一点。 – craniumonempty 2012-04-12 22:16:14

由于PHP 5.5,你可以这样做:

foreach (array_map(null, $array1, $array2) as list($item1, $item2)) 
{ 
    var_dump($item1); 
    var_dump($item2); 
} 

http://us3.php.net/manual/en/control-structures.foreach.php#control-structures.foreach.list