Могу ли я перебирать две петли равного размера с помощью foreach?

Я новичок в PHP. У меня есть два массива $array1 и $array2 равного размера. Я использовал петли foreach для итерации через массивы:

 foreach($array1 as $element1) { //Do stuff with $element1 } 

а также

 foreach($array2 as $element2) { //Do stuff with $element2 } 

но теперь я хотел бы перебирать оба массива одновременно, чтобы у меня был доступ к $element1 и $element2 в теле цикла.

Как мне это сделать?

 while (($element1 = next($array1)) !== false) { $element2 = next($array2); // Do something } 

Но это не удастся, если false – допустимое значение в $array1 . Если (в этом случае) false не разрешено в $array2 , вы можете просто поменять оба

«Foreach» -решение (если оба имеют один и тот же ключ)

 foreach ($array1 as $i => $element1) { $element2 = $array2[$i]; // Do something } 

Третье (я думаю, довольно приятное) решение, которое просто допускает примитивные типы в $array1

 foreach (array_combine(array_values($array1), array_values($array2)) as $element1 => $element2) { // Do something } 

Каждый возвращает массив, содержащий ключ и значение, и продвигает указатель на следующий элемент. Он возвращает false после того, как он прошел мимо последнего элемента.

 // Iterate until one of the arrays is complete while (($a = each($array_a)) !== false && ($b = each($array_b)) !== false) { echo "The key:value from array_a is {$a['key']}:{$a['value']}.\n"; echo "The key:value from array_b is {$b['key']}:{$b['value']}.\n"; } 

Для полного итерации обоих массивов используйте || вместо &&.

используйте цикл for вместо …

 for($i = 0;$i<count($array1);$i++) { /* access $array1[$i] and $array2[$i] here */ } 

Это будет работать, если индексы массивов являются числовыми и одинаковыми для обоих массивов

Как насчет

 $i = 0; foreach($array1 as $element) { // Do stuff with the element $stuff_from_this_array = $element; $stuff_from_other_array = $array2[$i]; $i++; } 

Очевидно, вы захотите поместить $ stuff_this_array и $ stuff_from_other_array в нечто более стойкое, но, возможно, это дает вам представление.

Это возможное решение. Если вы начинаете с next () напрямую, вы никогда не получите первый элемент массива.

 reset($array1); reset($array2); for ($element1 = current($array1), $element2 = current($array2); $element1 !== false && $element2 !== false; $element1 = next($array1), $element2 = next($array2)) { // Do something }