Увеличение элементов массива во время цикла foreach в php?

Рассмотрим следующий код:

<?php $arr = array(); $arr['b'] = 'book'; foreach($arr as $key=>$val) { print "key=>$key\n"; if(!isset($arr['a'])) $arr['a'] = 'apple'; } ?> 

Он не отображает 'a'. Как foreach работает с хэш-таблицей (массивом), чтобы пересечь каждый элемент. Если списки реализуются, почему я не могу добавить больше во время выполнения?

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

Foreach копирует структуру массива перед циклом (далее), поэтому вы не можете изменять структуру массива и ждать новых элементов внутри цикла. Вместо этого вы можете использовать foreach .

 $arr = array(); $arr['b'] = 'book'; reset($arr); while ($val = current($arr)) { print "key=".key($arr).PHP_EOL; if (!isset($arr['a'])) $arr['a'] = 'apple'; next($arr); } 

Или используйте ArrayIterator с foreach, потому что ArrayIterator не является массивом.

 $arr = array(); $arr['b'] = 'book'; $array_iterator = new ArrayIterator($arr); foreach($array_iterator as $key=>$val) { print "key=>$key\n"; if(!isset($array_iterator['a'])) $array_iterator['a'] = 'apple'; } 

Я думаю, вам нужно сохранить элемент массива

Пытаться

 <?php $arr = array(); $arr['b'] = 'book'; foreach($arr as $key=>$val) { print "key=>$key\n"; if(!isset($arr['a'])) $arr['a'][] = 'apple'; } print_r($arr); ?> 

Чтобы иметь возможность напрямую изменять элементы массива в цикле, перед значением $ value нужно указать &. В этом случае значение будет присвоено по ссылке.

http://cz2.php.net/manual/en/control-structures.foreach.php

Попробуй это:

Вы получите значения.

 <?php $arr = array(); $arr['b'] = 'book'; foreach($arr as $key=>$val) { print "key=>$key\n"; if(!isset($arr['a'])) $arr['a'] = 'apple'; } echo '<pre>'; print_r($arr); ?> 

Вывод:

 key=>b <pre>Array ( [b] => book [a] => apple ) 

Если вы хотите проверить наличие ключа или нет в массиве, используйте функцию array_key_exists

Например:

 <?php $arr = array(); $arr['b'] = 'book'; print_r($arr); // prints Array ( [b] => book ) if(!array_key_exists("a",$arr)) $arr['a'] = 'apple'; print_r($arr); // prints Array ( [b] => book [a] => apple ) ?> 

Если вы хотите использовать условие isset попробуйте вот так:

 $arr = array(); $arr['b'] = 'book'; $flag = 0; foreach($arr as $key=>$val) { print "key=>$key\n"; if(!isset($arr["a"])) { $flag = 1; } } if(flag) { $arr['a'] = 'apple'; } print_r($arr); 

Как насчет использования for и realtime array_keys ()?

 <?php $arr = array(); $arr['b'] = 'book'; for ($x=0;$x<count($arr); $x++) { $keys = array_keys($arr); $key = $keys[$x]; print "key=>$key\n"; if(!isset($arr['a'])) $arr['a'] = 'apple'; }