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 :

[Tableaux] Besoin d'explications sur les tableaux imbriqués


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [Tableaux] Besoin d'explications sur les tableaux imbriqués
    Bonjour, voici un bout de code au sujet duquel j'ai grandement besoin d'explications.
    Je ne comprends pas pourquoi lors du 2ème var_dump() le lineitems contenu dans la $_SESSION n'est pas affecté.

    Lorsqu'on affecte un tableau imbriqué dans une variable en php, c'est une affectation par valeur et non pas par référence ?

    Merci par avance pour vos réponses.


    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
    <?php
    session_start();
    $lineitems = array();
    $_SESSION["cart"] = array("lineitems" => $lineitems);
     
    var_dump($_SESSION);
    echo "<br/><br/>";
     
    $items = $_SESSION["cart"]["lineitems"];
    $items[] ="toto";
     
    var_dump($items);
    echo "<br/><br/>";
    var_dump($_SESSION);
    echo "<br/><br/>";	
    $_SESSION["cart"]["lineitems"][] ="toto";
    $_SESSION["cart"]["lineitems"][] ="tata";
    var_dump($_SESSION);
    echo "<br/><br/>";
     
    ?>

  2. #2
    Membre averti Avatar de TucSale
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 264
    Points : 325
    Points
    325
    Par défaut
    bonjour,

    Je ne comprends pas tres bien
    2ème var_dump() le lineitems contenu dans la $_SESSION n'est pas affecté.
    quand je test ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    array(1) { ["cart"]=>  array(1) { ["lineitems"]=>  array(0) { } } }
    array(1) { [0]=> string(4) "toto" }
    array(1) { ["cart"]=> array(1) { ["lineitems"]=> array(0) { } } }
    array(1) { ["cart"]=> array(1) { ["lineitems"]=> array(2) { [0]=> string(4) "toto" [1]=> string(4) "tata" } } }
    donc j'ai bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $_SESSION["cart"]["lineitems"][0] ="toto";
    $_SESSION["cart"]["lineitems"][1] ="tata";
    Tuc l'Original, On ne peut que l'aimer

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse

    Justement, le problème est qu'a la place de ce résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    array(1) { ["cart"]=>  array(1) { ["lineitems"]=>  array(0) { } } }
    array(1) { [0]=> string(4) "toto" }
    array(1) { ["cart"]=> array(1) { ["lineitems"]=> array(0) { } } }
    array(1) { ["cart"]=> array(1) { ["lineitems"]=> array(2) { [0]=> string(4) "toto" [1]=> string(4) "tata" } } }
    je m'attends à avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    array(1) { ["cart"]=>  array(1) { ["lineitems"]=>  array(0) { } } }
    array(1) { [0]=> string(4) "toto" }
    array(1) { ["cart"]=> array(1) { ["lineitems"]=> array(1) { [0]=> string(4) "toto" } }
    array(1) { ["cart"]=> array(1) { ["lineitems"]=> array(2) { [0]=> string(4) "toto" [1]=> string(4) "tata" } } }
    Plus exactement quand je fais ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $items = $_SESSION["cart"]["lineitems"];
    $items[] ="toto";
    puis ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var_dump($_SESSION)
    je pensais obtenir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array(1) { ["cart"]=> array(1) { ["lineitems"]=> array(1) { [0]=> string(4) "toto" } } }
    mais j'obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array(1) { ["cart"]=> array(1) { ["lineitems"]=> array(0) { } } }
    Et je ne comprends pas pourquoi

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    personne n'a d'idées ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    pour info: il manquait un &

    $items = & $_SESSION["cart"]["lineitems"];

    j'ai bien l'impression que quand on accède à un tableau imbriqué on a un passage par valeur et non pas par référence.

  6. #6
    Membre averti Avatar de TucSale
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 264
    Points : 325
    Points
    325
    Par défaut
    bonjour,

    $items = $_SESSION["cart"]["lineitems"]; n'est pas un affectation par adresse donc tu es obligé de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $items = $_SESSION["cart"]["lineitems"];
    $items[] ="toto";
    $_SESSION["cart"]["lineitems"] = $items;
    Ou alors il me semble que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $items = &$_SESSION["cart"]["lineitems"];
    devrait fonctionner
    Tuc l'Original, On ne peut que l'aimer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Explications sur les tableaux
    Par Damien75 dans le forum Débuter
    Réponses: 33
    Dernier message: 10/05/2014, 21h25
  2. Besoin d'explication sur les fonctions
    Par amateurc dans le forum Général Java
    Réponses: 7
    Dernier message: 05/01/2010, 14h32
  3. Besoin d'explication sur les imports
    Par Chicard dans le forum Langage
    Réponses: 13
    Dernier message: 14/08/2007, 16h24
  4. Réponses: 4
    Dernier message: 31/08/2006, 16h31
  5. Besoin d'explications sur les charset
    Par EGPMS dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 03/02/2006, 15h38

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