Как видно из этого другого ответа , существует несколько способов одновременной итерации двух массивов одинакового размера; однако все методы имеют довольно значительную ошибку. Вот некоторые из предостережений с предложенными методами:
FALSE
в одном из массивов. Мой вопрос: есть ли способ для этого, который не страдает от каких-либо из этих (или других) существенных оговорок?
Имейте в виду, что я просто спрашиваю об этом из любопытства; Я не имею в виду, и даже не знаю, действительно ли такой случай существует или будет полезен / практичен в реальном сценарии. Однако, вот некоторые примеры данных:
$arr1 = [ 'a' => 1, 'b' => FALSE, 'c' => new DateTime() ]; $arr2 = [ 'foo', TRUE, 7 ];
Вы можете использовать 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 }