如何从foreach循环内的数组中删除对象?

我遍历一个对象的数组,并希望删除基于它的'id'属性的对象之一,但我的代码不起作用。

foreach($array as $element) { foreach($element as $key => $value) { if($key == 'id' && $value == 'searched_value'){ //delete this particular object from the $array unset($element);//this doesn't work unset($array,$element);//neither does this } } } 

有什么build议么。 谢谢。

 foreach($array as $elementKey => $element) { foreach($element as $valueKey => $value) { if($valueKey == 'id' && $value == 'searched_value'){ //delete this particular object from the $array unset($array[$elementKey]); } } } 

你也可以在foreach值上使用引用:

 foreach($array as $elementKey => &$element) { // $element is the same than &$array[$elementKey] if (isset($element['id']) and $element['id'] == 'searched_value') { unset($element); } } 

我不是一个PHP程序员,但我可以说,在C#中,您不能通过迭代来修改数组。 您可能想要尝试使用您的foreach循环来标识元素的索引或要删除的元素,然后删除循环后的元素。

看起来你的unset语法是无效的,没有reindexing可能会在未来引起麻烦。 请参阅: 关于PHP数组的章节 。

上面显示了正确的语法。 还要记住reindexing的数组值 ,所以你不要索引你以前删除的东西。

这应该做的伎俩…..

 reset($array); while (list($elementKey, $element) = each($array)) { while (list($key, $value2) = each($element)) { if($key == 'id' && $value == 'searched_value') { unset($array[$elementKey]); } } }