Php 值消失后,设置Foreach()值

Php 值消失后,设置Foreach()值,php,foreach,Php,Foreach,我试图使用foreach循环向现有的数字索引数组添加一个新键。 我写了这段代码: foreach($new['WidgetInstanceSetting'] as $row){ $row['random_key'] = $this->__str_rand(32, 'alphanum'); debug($row); } debug($new); 第一次调试工作与我预期的一样:在$new数组中创建“random_key”。 现在,问题是第二次

我试图使用foreach循环向现有的数字索引数组添加一个新键。 我写了这段代码:

foreach($new['WidgetInstanceSetting'] as $row){
        $row['random_key'] = $this->__str_rand(32, 'alphanum'); 
        debug($row);
    }
    debug($new);
第一次调试工作与我预期的一样:在$new数组中创建“random_key”。 现在,问题是第二次调试显示$new数组,但没有新添加的键。 为什么会这样?如何解决此问题?

$row最终是foreach块范围内的一个副本,因此您实际上是在修改它的副本,而不是修改原始数组中的副本

在foreach中粘贴一个&以通过引用修改$new数组中的$row数组:

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

您不是在$new数组中创建随机_键,而是在$row中创建它。如果要修改数组中的if,则需要通过引用访问元素,如下所示:

foreach($new['WidgetInstanceSetting'] as &$row) {
    $row['random_key'] = $this->__str_rand(32, 'alphanum'); 
}
使用&获取可以更改的按参考值

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

别忘了在foreach之后取消引用,否则你会得到奇怪的错误提示。还有一件事:如何取消引用?@linkyndy:更新了我的答案。哦,我知道了。我认为这是更困难的事情。再次非常感谢您为我澄清这个问题:。