PHP: лучший способ повторить два параллельных массива?

Как видно из этого другого ответа , существует несколько способов одновременной итерации двух массивов одинакового размера; однако все методы имеют довольно значительную ошибку. Вот некоторые из предостережений с предложенными методами:

  • Вы не можете использовать значения FALSE в одном из массивов.
  • Вы можете использовать только скалярные значения в одном из массивов.
  • Вы должны использовать числовые индексированные массивы.
  • Оба массива должны использовать одни и те же ключи.
  • И т.п.

Мой вопрос: есть ли способ для этого, который не страдает от каких-либо из этих (или других) существенных оговорок?

Имейте в виду, что я просто спрашиваю об этом из любопытства; Я не имею в виду, и даже не знаю, действительно ли такой случай существует или будет полезен / практичен в реальном сценарии. Однако, вот некоторые примеры данных:

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

Solutions Collecting From Web of "PHP: лучший способ повторить два параллельных массива?"

Вы можете использовать MultipleIterator :

 $iterator = new MultipleIterator; $iterator->attachIterator(new ArrayIterator($array1)); $iterator->attachIterator(new ArrayIterator($array2)); foreach ($iterator as $values) { var_dump($values[0], $values[1]); } 

Вы можете найти больше примеров, касающихся различных опций в документах .

Начиная с 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

 <?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