Page 1 sur 1

Prob de sélection d'UNE ligne d'un Array

Posté : 26 oct. 2007, 11:17
par pak77
Bonjour à tous :!:

Je tente de faire un panier virtuel. Pour l'instant l'ajout d'article marche impec mais j'ai des soucis avec la suppression d'article. Le hic est qu'un article peut être inscrit dans la commande plusieurs fois mais avec des éléments différents. Donc si je supprime un article qui est commandé plus d'une fois : toutes les lignes correspondant à cette article sont effacés!

Code : Tout sélectionner

["id"]=> array(3) { [0]=> string(1) "2" [1]=> string(1) "8" [2]=> string(2) "10" }
ma question est : peut-on dire en php qu'on veut supprimer toute la ligne inscrit en [0] ou [1] etc

pour appliquer une fonction qui ressemblerait à ceci :

Code : Tout sélectionner

function supprim_article($liste_id, $reindex = true) { $suppression = false; $aCleSuppr = array_keys($_SESSION['panier']['id'], $liste_id); /* sortie la clé a été trouvée */ if (!empty ($aCleSuppr)) { /* on traverse le panier pour supprimer ce qui doit l'être */ foreach ($_SESSION['panier'] as $k=>$v) { foreach($aCleSuppr as $v1) { unset($_SESSION['panier'][$k][$v1]); } /* Réindexation des clés du panier si l'option $reindex a été laissée à true */ if($reindex == true) { $_SESSION['panier'][$k] = array_values($_SESSION['panier'][$k]); } $suppression = true; } } else { $suppression = "absent"; } return $suppression; echo 'suppression effectuée'; }
Mais si je fais comme cette fonction avec $_SESSION['panier']['id'], toutes les lignes de cette article seront supprimés... Je voudrais plutôt (par exemple) supprimer la troisième ligne donc [2]. Est-ce possible??

merci de votre aide

Posté : 26 oct. 2007, 11:40
par d0m
D'après ce que j'ai compris, tu as ton tableau $_SESSION['panier']
et tu veux supprimer pour tous les sous tableaux de ce tableau l'indice i.(équivalent à la ligne i)

Il te suffit de supprimer seulement l'indice voulu :
$i = indice_ligne_a_supprimer;
foreach($_SESSION['panier'] as $id => $lignes){
  unset($lignes[$i])
}

Posté : 26 oct. 2007, 13:12
par pak77
Tu as bien résumé mon prob mais..

:? je n'ai toujours pas réussi à supprimer de ligne avec

Code : Tout sélectionner

function supprim_article($liste_id) { $i = $liste_id; foreach($_SESSION['panier'] as $id => $lignes){ echo($lignes[$i]); echo $id; } }
j'ai volontairement mis echo au lieu de unset pour vérifier ce qu'il affiche
et bon il affiche la bonne chose mais ne supprime rien quand je mets unset
echo $id; m'inscrit le bon numéro de ligne à supprimer
echo($lignes[$i]); le bon contenu

Un truc m'échape :oops:

est-ce à cause d'un sous-tableau qui a une troisième sous-tableau ??
S.V.P.

Posté : 26 oct. 2007, 13:23
par d0m
c'est parce que dans une boucle :
foreach($tableau as $cle => $valeur)
$valeurest une copie, supprimer $valeur ne sert donc à rien
c'est plutot :
function supprim_article($liste_id) {
   foreach($_SESSION['panier'] as $id => $lignes){
     unset $_SESSION['panier'][$id][$liste_id];
   }
}

Posté : 27 oct. 2007, 17:05
par pak77
Merci D0M,

j'ai pas su vérifier hier ton truc, mais je crois que ça y est maintenant. J'ai fait plusieurs test de suppression de ligne et ça fonctionne.

J'ai eu du mal parce que j'avais oublier les () de unset() arfff et qu'il ne réindexait pas mes array ce qui le perturbait et ne supprimait pas la bonne ligne (parfois 2 du coup) bref je crois que c'est bon :wink:
function supprim_article($liste_id) { 
   foreach($_SESSION['panier'] as $id => $lignes){ 
     unset ($_SESSION['panier'][$id][$liste_id]); 
     $_SESSION['panier'][$id] = array_values($_SESSION['panier'][$id]); 
   } 
} 
Merci encore, en souhaitant devenir aussi pro des array loll