web-dev-qa-db-fra.com

Comment supprimer un objet d'un tableau dans une boucle foreach?

Je parcours un tableau d'objets et souhaite supprimer l'un des objets en fonction de sa propriété 'id', mais mon code ne fonctionne pas.

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
        } 
    }
}

Aucune suggestion. Merci.

128
ababa
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]);
        } 
    }
}
206
prodigitalson

Vous pouvez également utiliser des références sur les valeurs foreach:

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

Il semble que votre syntaxe pour unset n'est pas valide et que l'absence de réindexation pourrait causer des problèmes à l'avenir. Voir: la section sur PHP les tableaux =.

La syntaxe correcte est indiquée ci-dessus. Gardez également à l'esprit tableau-valeurs pour la réindexation, afin de ne jamais indexer quelque chose que vous avez précédemment supprimé.

1
pablo.meier

Cela devrait faire l'affaire.....

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

Je ne suis pas un grand programmeur php, mais je peux dire qu'en C #, vous ne pouvez pas modifier un tableau en le parcourant. Vous voudrez peut-être essayer d’utiliser votre boucle foreach pour identifier l’index de l’élément ou les éléments à supprimer, puis supprimez les éléments après la boucle.

0
Corey Sunwold