Могу ли я перебирать две петли равного размера с помощью foreach?
Я новичок в PHP. У меня есть два массива $array1
и $array2
равного размера. Я использовал циклы foreach
для итерации по массивам следующим образом:
foreach($array1 as $element1) {
//Do stuff with $element1
}
и
foreach($array2 as $element2) {
//Do stuff with $element2
}
но теперь я хотел бы перебирать оба массива одновременно, чтобы у меня был доступ к тегам $element1
и $element2
в теле цикла.
Как это сделать?
Ответы
Ответ 1
while (($element1 = next($array1)) !== false) {
$element2 = next($array2);
// Do something
}
Но это не удастся, если false
является допустимым значением в $array1
. Если (в этом случае) false
не разрешено в $array2
, вы можете просто заменить оба
A "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
}
Ответ 2
Each возвращает массив, содержащий ключ и значение, и продвигает указатель на следующий элемент. Он возвращает 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";
}
Чтобы итератировать полностью по обеим массивам, используйте || вместо & &.
Ответ 3
используйте цикл for вместо...
for($i = 0;$i<count($array1);$i++) {
/* access $array1[$i] and $array2[$i] here */
}
Это будет работать, если индексы массивов являются числовыми и одинаковыми для обоих массивов
Ответ 4
Что насчет
$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 в нечто более стойкое, но, возможно, это дает вам представление.
Ответ 5
Это возможное решение. Если вы начинаете с next() напрямую, вы никогда не получите первый элемент массива.
reset($array1); reset($array2);
for ($element1 = current($array1), $element2 = current($array2);
$element1 !== false && $element2 !== false;
$element1 = next($array1), $element2 = next($array2)) {
// Do something
}