【问题标题】:unset key in multidimensional array via nested foreaches通过嵌套的 foreaches 取消设置多维数组中的键
【发布时间】:2012-11-06 09:06:57
【问题描述】:

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

这个:

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

不工作。

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

注意:PHP 5.3

非常感谢!

【问题讨论】:

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


    【解决方案1】:

    虽然这可能有效(我从来没有这样做过,也没有测试过):

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

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

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

    顺便说一句,您的代码不起作用的原因是因为 foreach 循环遍历了您的数组的副本。

    【讨论】:

    • 谢谢! &s不要为我做。 PHP 5.3?第二个像美女一样工作!
    • '从 PHP 5.3.0 开始,当您在 foo(&$a); 中使用 & 时,您将收到一条警告说“调用时传递引用”已被弃用。从 PHP 5.4.0 开始,调用时传递引用已被删除,因此使用它会引发致命错误。 -- 来自docs
    • 我想我记得在文档中看到过类似的内容;)
    猜你喜欢
    • 2016-02-03
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 2016-09-10
    • 2011-11-07
    • 2015-09-30
    • 1970-01-01
    相关资源
    最近更新 更多