在值消失后设置Foreach()值

时间:2011-01-21 18:33:01

标签: php foreach

我正在尝试使用foreach()循环向现有的数字索引数组添加新键。 我写了这段代码:

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

第一个debug()按预期工作:'random_key'在$ new数组中创建。 现在,问题是第二个debug()显示$ new数组,但是没有新添加的键。 为什么会这样?我该如何解决这个问题?

4 个答案:

答案 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

中创建它