Я новичок в 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 }