我正在尝试使用foreach()循环向现有的数字索引数组添加新键。 我写了这段代码:
foreach($new['WidgetInstanceSetting'] as $row){
$row['random_key'] = $this->__str_rand(32, 'alphanum');
debug($row);
}
debug($new);
第一个debug()按预期工作:'random_key'在$ new数组中创建。 现在,问题是第二个debug()显示$ new数组,但是没有新添加的键。 为什么会这样?我该如何解决这个问题?
答案 0 :(得分:5)
$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);
答案 1 :(得分:5)
使用&
获取您可以更改的参考值。
foreach($new['WidgetInstanceSetting'] as &$row){
$row['random_key'] = $this->__str_rand(32, 'alphanum');
debug($row);
}
debug($new);
答案 2 :(得分:2)
如果要在数组中修改if,则需要通过引用 访问 元素,如下所示:
foreach($new['WidgetInstanceSetting'] as &$row) {
$row['random_key'] = $this->__str_rand(32, 'alphanum');
}
答案 3 :(得分:0)
您没有在$ new数组中创建random_key,而是在$ row
中创建它