通过嵌套的 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 取消设置多维数组中的键的主要内容,如果未能解决你的问题,请参考以下文章