【问题标题】:Deleting an item in a foreach loop in PHP [duplicate]在PHP的foreach循环中删除一个项目[重复]
【发布时间】:2012-02-15 19:58:22
【问题描述】:

我有一个 foreach 循环,如果满足某些条件,我想从数组中取消设置一个项目,如下所示:

foreach ($array as $element) {
    if (conditions) {
        unset($element);
    }
}

但之后该元素并没有取消设置。我究竟做错了什么?我是在取消对实际元素的引用还是类似的东西?

【问题讨论】:

  • 您是否关心索引是否仍然设置? $array[4]=NULL !== !isset($array[4])
  • unset 做了两件事。如果您使用了foreach($array as &$element)(请注意与号),那么您将用 null 替换该值,这是您可能追求的另一种行为:从数组中完全删除项目,不留痕迹。跨度>

标签: php arrays foreach reference unset


【解决方案1】:

简单的解决方案,通过它的索引取消设置元素:

foreach ($array as $key => $element) {
    if (conditions) {
        unset($array[$key]);
    }
}

只是取消设置$element 是行不通的,因为这个变量不是对数组元素的引用,而是一个副本。因此,改变$element 的值也不会改变数组。

【讨论】:

  • 谢谢,解决了我的问题!
【解决方案2】:

另一种方法,您可以通过执行以下操作将数组元素通过引用传递到循环中:

foreach($array as &$var) {
    unset($var);
}

这很有用,因为您可以直接访问数组元素以根据需要更改或删除,而无需构造新数组或按键访问。您对 $var 所做的任何更改都会影响 $array 的内容。

【讨论】:

  • 这只会取消设置引用,而不是原始元素。
猜你喜欢
  • 1970-01-01
  • 2015-12-06
  • 2018-05-06
  • 2016-10-27
  • 1970-01-01
  • 2016-11-30
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多