2009-11-10 11 views
1

J'ai ce code pour ajouter de nouveaux éléments à un tableau de multidimension:PHP: Comment supprimer un élément d'un tableau multidémision?

$this->shopcart[] = array(productID => $productID, items => $items); 

Alors, comment puis-je supprimer un élément de ce tableau? J'ai essayé ce code, mais sa ne fonctionne pas:

public function RemoveItem($item) 
{ 
    foreach($this->shopcart as $key) 
    { 
     if($key['productID'] == $item) 
     { 
      unset($this->shopcart[$key]);    
     } 
    } 
} 

Je reçois cette erreur:

  • Avertissement: type offset illégal dans unset dans C: \ xampplite \ htdocs \ katrinelund \ classes \ TillRepository.php en ligne
+0

Quelle ligne est la ligne 50? –

+0

Le premier exemple de code peut manquer certains '-s autour des clés. – erenon

+0

@ricebowl: Il doit être le unset uns. – erenon

Répondre

7
public function RemoveItem($item) 
{ 
     foreach($this->shopcart as $i => $key) 
     { 
       if($key['productID'] == $item) 
       { 
         unset($this->shopcart[$i]); 
         break;       
       } 
     } 
} 

Cela devrait faire l'affaire.

Mise à jour

Il y a aussi une autre façon:

if (false !== $key = array_search($item, $this->shopcart)) 
{ 
    unset($this->shopcart[$key]; 
} 
+0

Upvote pour le premier exemple. Typo dans la seconde:! == insted de! ===, et le second est beaucoup moins lisible; ne l'utilisez pas si c'est possible. – erenon

+0

Ce n'est pas une faute de frappe, jetez un oeil à http://www.php.net/manual/fr/language.operators.comparison.php. Moins lisible? Eh bien, ça dépend du codeur du codeur, personnellement je le préfère. –

+0

@David: Je ne peux pas voir! === – erenon

2

Vous n'êtes pas énumérer sur indices, mais les valeurs là-bas, à désinitialiser un index de tableau, vous devez désinitialiser par index , pas en valeur.

Aussi, si votre index de tableau est en fait la productID vous pouvez éliminer la boucle tout à fait:

public function RemoveItem($productID) 
{ 
    if (isset($this->shopcart[$productID])) 
    { 
     unset($this->shopcart[$productID]); 
    } 
} 

Votre exemple ne montre pas comment vous ajoutez des articles à $this->shopcart, mais cela peut ou ne peut pas être un option pour vous en fonction des besoins de votre projet. (c'est-à-dire pas si vous avez besoin d'avoir des instances séparées du même produit dans le panier).

Questions connexes