PHP取消设置嵌套数组的部分

时间:2012-10-16 19:37:28

标签: php arrays unset

尝试处理数组并删除较大数组中的特定关联数组。我现在的代码在for循环中本地删除特定部分,但不影响原始的$cursor数组。

foreach($cursor as $key) {

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

        if ($value == 'user'){

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

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

2 个答案:

答案 0 :(得分:3)

通过引用迭代原始数组:

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

值得注意的是,无论何时执行此操作,使用unset跟踪循环以消除引用都是非常好主意:

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

就我个人而言,我觉得这有点难看(PHP的课程标准),但这样你就消除了以后重用名字$key并造成各种“有趣”效果的风险。

答案 1 :(得分:3)

问题是你在循环中得到的$k不是$cursor包含的原始数组,它只是一个循环进入下一轮就会被破坏的副本。要从confinfo中真正删除$cursor索引,您需要从$cursor开始,然后参考工作。

替换

unset($k['confinfo']);

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

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