IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Suppression d'un élément de tableau (en session)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 4
    Par défaut Suppression d'un élément de tableau (en session)
    Bonjour,

    j'ai un problème avec mon virtuel que j'ai crée en session.

    Ce panier se présente comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Array
    (
        [0] => Array
            (
                [Id_Article] => 1
                [Titre] => Cartouche encre noir
                [Quantite] => 1
                [Prix] => 8.49
            )
     
        [1] => Array
            (
                [Id_Article] => 3
                [Titre] => CD RW
                [Quantite] => 1
                [Prix] => 2.99
            )
     
        [2] => Array
            (
                [Id_Article] => 16
                [Titre] => Lecteur DVD
                [Quantite] => 1
                [Prix] => 57.99
            )
     
    )
    Ce que j'aimerai, c'est de supprimer donc un élément de ce tableau, j'ai commencé a réfléchir à une fonction en utilisant une boucle "foreach" mais j'avoue que j'ai pas bien saisi le fonctionnement et donc je me retrouve coincé!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function DeleteIn($ArtId){
    		foreach($_SESSION["panier"] as $Panier) 
    		{
    			if($Panier["Id_Article"] == $ArtId) 
    			{
    				unset($Panier);
    				break;
    			} 
    		}
    }
    Et donc évidemment, cela ne marche pas! Et j'ai donc besoin de votre aide!

    Merci par avance !

  2. #2
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function DeleteIn($ArtId){
    	foreach($_SESSION["panier"] as &$Panier)
    	{
    		if($Panier["Id_Article"] == $ArtId)
    		{
    			unset($Panier[$value]);
    			break;
    		}
    	}
    }
    foreach avec un & force à passer par référence et non copie

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 4
    Par défaut
    Pas de changement constaté.

    Mon problème est que je n'arrive pas à pointer sur le 1er, ou 2ème ou 3ème élément du tableau et ensuite le supprimer. J'ai du mal à maitriser ce "foreach".

  4. #4
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     
    function DeleteIn($ArtId){
    	foreach($_SESSION["panier"] as $id => $Panier)
    	{
    		if($Panier["Id_Article"] == $ArtId)
    		{
    			unset($_SESSION["panier"][$id]);
    			break;
    		}
    	}
    } 
     
    $_SESSION['panier'][0] = array('Id_Article' => 1, 'Titre' => 'Cartouche encre noir', 'Quantite' => 1, 'Prix' => 8.49);
    $_SESSION['panier'][1] = array('Id_Article' => 3, 'Titre' => 'CD RW', 'Quantite' => 1, 'Prix' => 2.99);
    $_SESSION['panier'][2] = array('Id_Article' => 16, 'Titre' => 'Lecteur DVD', 'Quantite' => 1, 'Prix' => 57.99);
     
    print_r($_SESSION);
     
    DeleteIn(3);
     
    print_r($_SESSION);
    ça ça fonctionne ^^

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 4
    Par défaut
    Yes !! Merci ça fonctionne !

    J'étais donc loin de la solution, je n'aurai jamais utilisé "as $id => $Panier".
    Il faut que je vois en profondeur les tableaux ..

    Par contre je voudrai savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		if($Panier["Id_Article"] == $ArtId)
    		{
    			unset($_SESSION["panier"][$id]);
    			break;
    		}
    Pourquoi on ne met pas :
    ?

    A quoi correspondent $id et $Panier concrètement ?

  6. #6
    Membre émérite Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Par défaut
    Ton tableau est composé de 2 parties : La clef et la valeur.
    La clef peut être une chaine, un entier enfin beaucoup de choses.
    La valeur absolument tout ce que tu veux.

    Bon.

    Lorsque tu fais un foreach, tu va parcourir tout le tableau du début à la fin (pour être simple).
    foreach($tableau as $key => $value)

    Dans cette syntaxe, tu demande à PHP de te fournir dans la boucle foreach la clef ($key) et la valeur associée ($value).

    Ces valeurs sont données en COPIE c'est à dire que si tu modifies $value, ce ne sera pas changé dans $tableau. Il faudra soit faire un $tableau[$key] = $newvalue; Soit forcer PHP à te passer la valeur par référence
    foreach($tableau as $key => &$value)

    De cette façon, si tu modifies $value, la valeur dans le tableau sera modifiée.

    Donc ici tu peux aussi bien écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function DeleteIn($ArtId){
    	foreach($_SESSION["panier"] as $id => $Panier)
    	{
    		if($Panier["Id_Article"] == $ArtId)
    		{
    			unset($_SESSION["panier"][$id]);
    			break;
    		}
    	}
    }
    Que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function DeleteIn($ArtId){
    	foreach($_SESSION["panier"] as $id => &$Panier)
    	{
    		if($Panier["Id_Article"] == $ArtId)
    		{
    			unset($panier[$id]);
    			break;
    		}
    	}
    }
    Tu vois ce que je veux dire ?

Discussions similaires

  1. KSH - Suppression d'un élément d'un tableau
    Par Cj_Dal dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 11/10/2010, 19h14
  2. Suppression élément vide tableau associatif
    Par stomerfull dans le forum Langage
    Réponses: 4
    Dernier message: 19/02/2010, 10h42
  3. Suppression d'un élément dans un tableau
    Par hammag dans le forum Langage
    Réponses: 1
    Dernier message: 25/06/2009, 15h30
  4. Réponses: 6
    Dernier message: 22/05/2009, 21h04
  5. [Tableaux] Suppression d'élément de tableau
    Par jpascal dans le forum Langage
    Réponses: 2
    Dernier message: 27/12/2006, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo