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

JavaScript Discussion :

Array php à deux dimension et JSON


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 42
    Points : 23
    Points
    23
    Par défaut Array php à deux dimension et JSON
    Bonjour à tous!

    Voila j'ai remarqué que lorsqu'un tableau est de deux dimension en php et qu'il y a plusieurs cases dans chaque case de la première dimension comme suit par exemple:
    array

    0 =>
    array
    'id' => string '23' (length=2)
    0 => string '23' (length=2)
    'nom' => string 'Alsace' (length=6)
    1 => string 'Alsace' (length=6)

    1 =>
    array
    'id' => string '1' (length=1)
    0 => string '1' (length=1)
    'nom' => string 'Aquitaine' (length=9)
    1 => string 'Aquitaine' (length=9)

    2 =>
    array
    'id' => string '2' (length=1)
    0 => string '2' (length=1)
    'nom' => string 'Auvergne' (length=8)
    1 => string 'Auvergne' (length=8)

    3 =>
    array
    'id' => string '24' (length=2)
    0 => string '24' (length=2)
    'nom' => string 'Basse-Normandie' (length=15)
    1 => string 'Basse-Normandie' (length=15)

    4 =>
    array
    'id' => string '3' (length=1)
    0 => string '3' (length=1)
    'nom' => string 'Bourgogne' (length=9)
    1 => string 'Bourgogne' (length=9)

    5 =>
    array
    'id' => string '4' (length=1)
    0 => string '4' (length=1)
    'nom' => string 'Bretagne' (length=8)
    1 => string 'Bretagne' (length=8)
    lorsqu'on encode celui-ci en Json, il ne va pas créer un seul objet avec les différents tableau (un tableau d'objets) comme c'est le cas lorsque la deuxième dimension du tableau ne contient qu'une case à chaque fois comme suit:
    array

    0 =>
    array
    0 => string 'Alsace' (length=6)

    1 =>
    array
    0 => string 'Aquitaine' (length=9)

    2 =>
    array
    0 => string 'Auvergne' (length=9)

    3 =>
    array
    0 => string 'Bourgogne' (length=9)
    ...
    qui donne cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {"1":["Aquitaine"],"2":["Auvergne"],"3":["Bourgogne"],"4":["Bretagne"],"5":["Centre"]}
    Donc dans l'exemple ci-dessus il n'y a qu'un seul objet renvoyé par JSON, mais dans mon exemple où la deuxième dimension contient plusieurs cases voila ce que JSON encode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [{"id":"1","0":"1","nom":"Aquitaine","1":"Aquitaine"},{"id":"2","0":"2","nom":"Auvergne","1":"Auvergne"},{"id":"24","0":"24","nom":"Basse-Normandie","1":"Basse-Normandie"},{"id":"3","0":"3","nom":"Bourgogne","1":"Bourgogne"},{"id":"4","0":"4","nom":"Bretagne","1":"Bretagne"},{"id":"5","0":"5","nom":"Centre","1":"Centre"}]
    On voit bien qu'il créé automatiquement un objet pour chaque case de la première dimension, soit un tableau d'objet alors que dans l'exemple précédent on avait un objet de tableaux:

    Quelqu'un peut-il m'expliquer svp?

    Merci d'avance

    PS: Au passage quand le tableau est de cette forme :
    array

    0 =>
    array
    0 => string 'Alsace' (length=6)

    1 =>
    array
    0 => string 'Aquitaine' (length=9)
    ...
    Il est passé ou l'indice "0" à chaque fois lorsqu'on encode en JSON?

    Merci

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    C'est normal : les tableaux associatifs n'existent pas en JavaScript. Seuls les tableaux indicés existent. Donc lorsque tu as un tableau associatif en PHP, tu auras un objet en JavaScript.
    D'où le nom "JavaScript Object Notation"...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Salut
    encore une fois, il ne faut pas confondre tableau et hashMap
    même si en PHP on utilise le constructeur Array pour les deux
    Il s'agit de deux types d'objet différents.

    ensuite, il n'existe pas de tableaux à deux dimensions en PHP
    Un tableau a une seule dimension et il contient des objets qui peuvent être n'importe quoi. Ce peut donc être des tableaux.
    avec une structure comme
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tab = Array();
    $tab[] = Array(1, 2, 3, 4);
    $tab[] = Array(5, 6, 7, 8);
    on peut simuler le comportement d'une matrice 2x4 (tableau à deux dimensions), mais ce n'en est pas une
    Car
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tab = Array();
    $tab[] = Array(1, 2, 3, 4);
    $tab[] = Array(5, 6, 8);
    est une définition PHP tout aussi valide, mais ce n'est un tableau 2D ça n'a rien à voir avec un tableau 2D c'est un tableau de tableau.

    pour ce qui est du passage à JSON cela va donner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[1, 2, 3, 4],[5, 6, 8]]
    mais bien souvent les développeurs PHP confondent HashMap et Tableau ainsi
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tab = Array();
    $tab["0"] = Array("1" => 1, "2" => 2, "3" => 3, "4" => 4);
    $tab["1"] = Array("1" => 5, "2" => 6, "3" => 7, "4" => 8);
    ceci n'est pas un tableau, mais une hashMap qui donc en JSON donnera une hashMap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"0":{"1":1, "2":2, "3":3, "4":4},"1":{"1":5,"2":6,"3":7, "4":8}}
    Mais PHP est encore plus souple, car il permet de mixer tableau et hashmap
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab = Array(1, 2, 3, 4);
    $tab["id"]=25;
    $tab contient les élément 1, 2, 3, 4 avec les indices 0, 1, 2, 3. mais, il contient aussi l'élément 25 dont la hashkey est "id" dans ce cas lorsque l'encodage JSON aura lieu PHP va choisir la représentation la plus appropriée soit donc une hashMap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"0":1, "1":2, "2":3, "3":4, "id": 25}

    En conclusion il n'y a qu'une seule dimension lorsque PHP encode un objet crée avec Array si un des éléments du tableau est créé avec un une clef de hachage JSON produit une hashmap (objet JavaScript) si tous les éléments sont des éléments indicés il crée un tableau.

    Le résultat final sera soit un tableau soit une hashMap dont chaque élément est le résultat de l'encodage JSON de l'élément de la structure d'origine.

    Si le "Tableau" PHP contient des tableaux la structure contiendra des tableaux si elle contient des hashmap la structure contiendra des hashMap et si elle contient un mélange de tout et n'importe quoi la structure contiendra des éléments hétérogènes.

    A+JYT

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Bonjour.

    Merci beaucoup pour vos réponse. Veuillez m'excuser de ne repondre que maintenant mais j'étais dans l'incapacité de me répondre. J'ai à peu prêt bien compris ce que tu m'as expliqué mais justement si j'applique ce que tu m'as expliqué normalement avec mon premier exemple, je ne devrai pas avoir un tableau d'objets en JSON comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{"id":"1","0":"1","nom":"Aquitaine","1":"Aquitaine"},{"id":"2","0":"2","nom":"Auvergne","1":"Auvergne"},{"id":"24","0":"24","nom":"Basse-Normandie","1":"Basse-Normandie"},{"id":"3","0":"3","nom":"Bourgogne","1":"Bourgogne"},{"id":"4","0":"4","nom":"Bretagne","1":"Bretagne"},{"id":"5","0":"5","nom":"Centre","1":"Centre"}]
    mais juste un objet d'objets, c'est à dire une hash map.

    Pouvez vous m'expliquer svp?

    Je ne comprends toujours pas pourquoi un exemple me donne un structure et l'autre me donne une structure différente alors que les 2 sont des tableaux contenant des "objets".

    Merci

Discussions similaires

  1. Array Php vers Json
    Par okoweb dans le forum Langage
    Réponses: 2
    Dernier message: 18/01/2011, 13h18
  2. Tableau php à deux dimensions
    Par phpdebutor dans le forum Langage
    Réponses: 4
    Dernier message: 17/07/2010, 01h03
  3. trier une variable de Type Array a deux dimension
    Par boboss123 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/03/2010, 17h12
  4. Recuperer un tableau à deux dimensions PHP sous Javascript
    Par Archalia dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/01/2010, 11h44

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