Как удалить объект из массива внутри цикла foreach? - PullRequest
128 голосов
/ 21 февраля 2010

Я перебираю массив объектов и хочу удалить один из объектов на основе его свойства '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 ]

205 голосов
/ 21 февраля 2010
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]);
        } 
    }
}
2 голосов
/ 09 июня 2015

Вы также можете использовать ссылки на foreach значения:

foreach($array as $elementKey => &$element) {
    // $element is the same than &$array[$elementKey]
    if (isset($element['id']) and $element['id'] == 'searched_value') {
        unset($element);
    }
}
1 голос
/ 07 февраля 2013

Это должно сработать .....

reset($array);
while (list($elementKey, $element) = each($array)) {
    while (list($key, $value2) = each($element)) {
        if($key == 'id' && $value == 'searched_value') {
            unset($array[$elementKey]);
        }
    }
}
1 голос
/ 21 февраля 2010

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

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

0 голосов
/ 21 февраля 2010

Я не большой программист php, но я могу сказать, что в C # вы не можете модифицировать массив во время итерации. Вы можете попробовать использовать цикл foreach для определения индекса элемента или удаляемых элементов, а затем удалить элементы после цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...