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 averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    42
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 42
    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 : 55
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    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 confirm�
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : Urbaniste
    Secteur : Sant�

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    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 donnermais 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 averti
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    42
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 42
    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