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

Posted

技术标签:

【中文标题】通过嵌套的 foreaches 取消设置多维数组中的键【英文标题】:unset key in multidimensional array via nested 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

非常感谢!

【问题讨论】:

【参考方案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 我想我记得在文档中看到过类似的内容;)

以上是关于通过嵌套的 foreaches 取消设置多维数组中的键的主要内容,如果未能解决你的问题,请参考以下文章

取消设置多维数组中的数据

如何取消设置嵌套 foreach 中的特定数组?

PHP如何将嵌套的foreach变成数组的数组(多维数组)

PHP:使用 foreach 从多维数组中删除元素(按键)

使用递归函数获取多维php数组的新值和键

取消设置多维数组中的列