Значение Foreach () устанавливается после исчезновения значения - PullRequest
0 голосов
/ 21 января 2011

Я пытаюсь добавить новый ключ в существующий числовой индексированный массив, используя цикл foreach (). Я написал этот кусок кода:

foreach($new['WidgetInstanceSetting'] as $row){
        $row['random_key'] = $this->__str_rand(32, 'alphanum'); 
        debug($row);
    }
    debug($new);

Первый debug () работает как я ожидал: в массиве $ new создается 'random_key'. Теперь проблема в том, что второй debug () показывает массив $ new, но без вновь добавленный ключ. Почему это происходит? Как я могу решить эту проблему?

Ответы [ 4 ]

5 голосов
/ 21 января 2011

Используйте &, чтобы получить значение по ссылке, которое вы можете изменить.

foreach($new['WidgetInstanceSetting'] as &$row){
        $row['random_key'] = $this->__str_rand(32, 'alphanum'); 
        debug($row);
    }
    debug($new);
5 голосов
/ 21 января 2011

$row заканчивается копией в области действия блока foreach, так что вы действительно изменяете его копию, а не то, что находится в исходном массиве вообще.

Вставьте & в ваш foreach, чтобы изменить массив $row в вашем массиве $new по ссылке:

foreach($new['WidgetInstanceSetting'] as &$row){

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

foreach($new['WidgetInstanceSetting'] as &$row){
    $row['random_key'] = $this->__str_rand(32, 'alphanum'); 
    debug($row);
}
unset($row);
debug($new);
2 голосов
/ 21 января 2011

Вам необходимо получить доступ к элементу по ссылке , если вы хотите изменить его в массиве следующим образом:

foreach($new['WidgetInstanceSetting'] as &$row) {
    $row['random_key'] = $this->__str_rand(32, 'alphanum'); 
}
0 голосов
/ 21 января 2011

вы не создаете random_key в массиве $ new, вы создаете его в $ row

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...