通过嵌套的foreaches在多维数组中取消设置键

时间:2012-11-18 02:32:37

标签: php multidimensional-array foreach nested-loops unset

似乎很奇怪我找不到答案,但是这里有:

此:

foreach ($stuffs as $stuffRow) {
    foreach ($stuffRow as $stuff) {
        if($stuff=== null){
            unset($stuff);
        }
    }
}

无效。

我知道我不应该说“不工作”,但这就是我所拥有的。 if条件有效;我测试过了。但是,当我应用未设置时,key =>值仍然存在。

注意:PHP 5.3

非常感谢提前!

1 个答案:

答案 0 :(得分:1)

虽然这可能有用(我从不这样做而且没有测试过):

foreach ($stuffs as &$stuffRow) {
    foreach ($stuffRow as &$stuff) {
        if($stuff=== null){
            unset($stuff);
        }
    }
}

如果我没记错的话,通过引用传递对foreachs来说不是一个好主意(但不记得为什么,可能已经在某个地方的php doc中,也许有人可以在评论中澄清,但我认为这是因为foreach在数组的副本上工作并传递引用将引用传递给副本,而不是原始引用,尽管这只是一个有根据的猜测)。相反,试试这个。

foreach ($stuffs as $key1=>$stuffRow) {
    foreach ($stuffRow as $key2=>$stuff) {
        if($stuff=== null){
            unset($stuffs[$key1][key2]);
        }
    }
}

你的代码不能正常工作的原因是因为foreach循环迭代你的数组的COPY。