2

试图处理一个数组并在更大的数组集中删除一个特定的关联数组。我现在拥有的代码可以在 for 循环中本地删除特定部分,但不会影响原始$cursor数组。

foreach($cursor as $key) {

    foreach($key as $value => $k){

        if ($value == 'user'){

            unset($k['confinfo']);
        }
    }   
}

这是一个全局变量问题吗?如何取消设置原始变量?

4

2 回答 2

4

通过引用迭代原始数组:

foreach($cursor as &$key) // added &

重要的是要注意,无论何时执行此操作,最好使用循环unset来破坏引用:

foreach($cursor as &$key) {
    // ...
}
unset($key);

就我个人而言,我觉得这有点难看(与 PHP 课程相当),但这样您就消除了$key以后重用名称并导致各种“有趣”效果的风险。

于 2012-10-16T19:38:56.807 回答
3

问题是$k您进入循环的不是$cursor包含的原始数组,它只是一个副本,一旦循环进入下一轮就会被销毁。要真正从您那里删除confinfo索引,$cursor您需要开始$cursor并参考您的工作。

代替

unset($k['confinfo']);

unset($cursor[$key][$value]['confinfo']);

它不像其他答案那么短,但它更好地显示了正在发生的事情,因此更容易在以后进行调试和扩展。

于 2012-10-16T19:52:55.957 回答