Как удалить объект из массива внутри цикла 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 } } } 

Какие-либо предложения. Благодарю.

 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($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); } } с 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 для идентификации индекса элемента или элементов для удаления, а затем удалить элементы после цикла.

Похоже, ваш синтаксис для отмены недействителен, и отсутствие переиндексации может вызвать проблемы в будущем. См. Раздел о массивах PHP .

Правильный синтаксис показан выше. Также имейте в виду значения массива для переиндексации, поэтому вы никогда не индексируете то, что вы ранее удалили.

Это должно сделать трюк …..

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