161 votes

Comment supprimer un objet du tableau dans une boucle foreach ?

J'itère à travers un tableau d'objets et je veux supprimer 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
        } 
    }
}

Toutes les suggestions. Merci.

2 votes

-5voto

Corey Sunwold Points 6330

Je ne suis pas un grand programmeur php, mais je peux dire qu'en C#, vous ne pouvez pas modifier un tableau tout en l'itérant. Vous pouvez essayer d'utiliser votre boucle foreach pour identifier l'index de l'élément, ou des éléments à supprimer, puis supprimer les éléments après la boucle.

15 votes

Bien que ce soit une mauvaise pratique dans la plupart des langages, les tableaux en PHP sont fondamentalement des tableaux associatifs qui peuvent être itérés dans l'ordre. La suppression d'un élément précédent ne modifie pas les clés des éléments qui viennent après lui.

23 votes

En fait, c'est autorisé parce que le tableau que foreach utilise en interne est une copie du tableau original. Ainsi, la modification du tableau d'origine est parfaitement sûre.

70 votes

En fait, c'est autorisé parce que le php est complètement détraqué.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X