Как перебрать все значения в массиве, который увеличивается при переборах?

Пример ниже не будет работать, потому что foreach работает над копией массива, но концептуально показывает, чего я хочу достичь.

$items = array('a', 'b', 'c', 'd');
foreach ($items as $i) {
echo $i;
if ($i === 'c') {
$items[] = 'e';
}
}

Я хочу это напечататьabcde‘, но по вышеупомянутой причине это только печатает’abcd». Я смотрел на array_map а также array_walk и другие, но не нашли решения.

-2

Решение

Еще один вариант с использованием while без необходимости считать. Также работает с ассоциативными массивами и извлекает ключ в $k если нужно:

while(list($k, $i) = each($items)) {
echo $i;
if ($i === 'c') {
$items[] = 'e';
}
}

Или используя for цикл, но это остановится на любом элементе, который содержит логическое значение false или оценивает false:

for($i = reset($items) ; $i ; $i = next($items)) {
4

Другие решения

Вы можете использовать while цикл (или, возможно, нормальный for цикл тоже), который оценивает условие выхода после каждой итерации. Обратите внимание, что в этом коде $i изменился на индекс, поэтому вы используете $items[$i] чтобы получить реальный характер.

$items = array('a', 'b', 'c', 'd');
$i = 0;
while ($i < count($items)) {
echo $items[$i];
if ($items[$i] === 'c') {
$items[] = 'e';
}
$i++;
}
5

По вопросам рекламы [email protected]