Пример ниже не будет работать, потому что foreach
работает над копией массива, но концептуально показывает, чего я хочу достичь.
$items = array('a', 'b', 'c', 'd');
foreach ($items as $i) {
echo $i;
if ($i === 'c') {
$items[] = 'e';
}
}
Я хочу это напечататьabcde
‘, но по вышеупомянутой причине это только печатает’abcd
». Я смотрел на array_map
а также array_walk
и другие, но не нашли решения.
Еще один вариант с использованием 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)) {
Вы можете использовать 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++;
}