Как удалить объект из массива внутри цикла 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
}
}
}
любые предложения. Спасибо.
5 ответов:
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); } }
похоже, что ваш синтаксис для unset недействителен, и отсутствие переиндексации может вызвать проблемы в будущем. Смотрите:раздел по PHP-массивы.
правильный синтаксис, показанный выше. Также имейте в виду array-values для переиндексации, так что вы никогда не индексировать то, что вы ранее удалили.
Это должно сделать трюк.....
reset($array); while (list($elementKey, $element) = each($array)) { while (list($key, $value2) = each($element)) { if($key == 'id' && $value == 'searched_value') { unset($array[$elementKey]); } } }
Я не очень программист php, но я могу сказать, что в C# вы не можете изменить массив во время итерации через него. Вы можете попробовать использовать цикл foreach для определения индекса элемента или элементов для удаления, а затем удалить элементы после цикла.
Comments