$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);