PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 09-07-2013 15:03:19

furil
Membre
Inscription : 09-07-2013
Messages : 2

Création d'une structure JSON(problème d'array)

Bonjour,

Voilà je suis en train de faire un organigramme dynamique à l'aide d'une base de données SQL et de PHP. J'ai découvert un superbe outil en JavaScript qui réponds à tous les besoins de mon tuteur de stage : JavaScript Infovis Toolkit.

On a 3 grands niveaux : le 1er niveau est le Service qui regroupe plusieurs Antennes(le 2eme niveau) et une Antenne regroupe plusieurs équipes(3eme niveau).
Parmi toutes les personnes faisant partit de l'entreprise chacune à des responsabilités à un niveau en particulier par exemple :

Le chef de service qui est donc au niveau 1
Ses assistants qui sont aussi au niveau 1 mais sont sous sa responsabilité
Le chef d'antenne au niveau 2 etc...

Ici on va parler juste du niveau 1 (service) et niveau 2 (antenne)

voici la partie du code qui nous intéresse :

//Creation d'un array qui sera encodé pour le js parent-child org
     $JsonArray = array();
     /*while($data = mysql_fetch_assoc($sqlCDS)){
 
      echo $data['nom_agent'];
      } */
     //echo '<table>';
     while($parentServ = mysql_fetch_assoc($sqlCDS))
     {
       $temp2 = array(
        "id" => $parentServ["No_agent"]
        ,"name" => $parentServ["nom_agent"]
        );
        //echo $temp['id'];
        //echo $temp['name'];
        $children = array();
       while ($childServ = mysql_fetch_assoc($sqlAGENT))
       {
         $children[] = array(
         "id" => $childServ["No_agent"]
         ,"name" => $childServ["nom_agent"]
         );
        //echo $temp['id'];
        //echo $temp['name'];
       }
      //$temp[] = $children;
      //$JsonArray[] = $temp;
      while($childServAnt = mysql_fetch_assoc($sqlAntenne))
       {
        $children[] = array(
        "id" => $childServAnt["No_antenne"]
        ,"name" => $childServAnt["Lib_antenne"]
        );
       }
 
      //Insertion des données dans une structure commune
      $JsonObj['id'] = $temp2['id'];
      $JsonObj['name'] = $temp2['name'];
      $JsonObj['children']=$children;
     }
     //echo'</table>';
     //encodage des données au format JSON
     echo json_encode($JsonObj);
 


La connexion à la base de données est effective, les requêtes fonctionnent, elles s’exécutent correctement mais c'est l'insertion de toutes ces données dans une structure bien particulière afin de l'encoder en JSON (array dans un array).



Voilà ce que j'ai actuellement :


{"id":"1234","name":"Furil","children":[
    {"id": "123", "name":"Jean"},
    {"id": "124", "name":"toto"},
    {"id": "125", "name":"titi"},
    {"id": "126", "name":"tete"},
    {"id": "128", "name":"littérature"},
    {"id": "129", "name":"Sciences"},
    {"id": "130", "name":"Sports"}
]}
 

La particularité de cette structure c'est que les assistants au chef de service sont au même niveau que les noms des antennes, il y a donc beaucoup de valeurs sur la même lignes smile . J'aimerai donc regrouper toutes les antennes(littératures,sciences et sports dans cet exemple) dans une valeur statique appelé "Antennes" dont voici le résultat voulu :



{"id":"1234","name":"Furil","children":[
    {"id": "123", "name":"Jean"},
    {"id": "124", "name":"toto"},
    {"id": "125", "name":"titi"},
    {"id": "126", "name":"tete"},
    {"id": "127", "name":"Antennes","children":[
        {"id":"128","name":"littérature"},
        {"id":"129","name":"Sciences"},
        {"id":"130","name":"Sports"}
    ]}
]}
 

Voilà s'il y a besoins de plus d'informations, n'hésitez pas smile

Merci d'avance et bonne journée. smile

Dernière modification par furil (09-07-2013 15:05:49)

Hors ligne

#2 11-07-2013 07:31:34

furil
Membre
Inscription : 09-07-2013
Messages : 2

Re : Création d'une structure JSON(problème d'array)

Bonjour,


Voilà donc la solution pour ceux qui auront le même problème que moi :

    //Creation d'un array qui sera encodé pour le js parent-child org
         $JsonArray = array();
         while($parentServ = mysql_fetch_assoc($sqlCDS))
         {
           $temp2 = array(
            "id" => $parentServ["No_agent"]
            ,"name" => $parentServ["nom_agent"]
            );
            //echo $temp['id'];
            //echo $temp['name'];
            $children = array();
            $children2 = array();
            $ant = array();
           //On exécute la requête permettant de récupérer tous les enfants
           while ($childServ = mysql_fetch_assoc($sqlAGENT))
           {
             $children[] = array(
             "id" => $childServ["No_agent"]
             ,"name" => $childServ["nom_agent"]
             );
            //echo $temp['id'];
            //echo $temp['name'];
           }
          //-------------------------------------------------
          //$temp[] = $children;
          //$JsonArray[] = $temp;
          //Déclaration de la structure qui va regrouper les antennes
          $ant = array(
          "id" => "1"
          ,"name" =>"Antennes"
          );
         //On execute la requête permettant d'avoir tous les terrains de jeux
          while($childServAnt = mysql_fetch_assoc($sqlAntenne))
           {
            $children2[] = array(
            "id" => $childServAnt["No_antenne"]
            ,"name" => $childServAnt["Lib_antenne"]
            );
           }
        //-----------------------------------------------
          $ant['children'] = $children2; //on stocke les terrains de jeux dans "Antennes"
          $children[] = $ant; //on met "Antennes" au même niveau que les enfants
          //Insertion des données dans une structure commune
          $JsonObj['id'] = $temp2['id'];//stockage du 1er paramètre du parent
          $JsonObj['name'] = $temp2['name']; // 2nd paramètre du parent
          $JsonObj['children']=$children; // tous le reste : tata,titi, Antennes(...)
         }
         //encodage des données au format JSON
         echo json_encode($JsonObj);
 

Ce qui va nous donner comme résultat :

    {"id":"1234","name":"Furil","children":[
        {"id": "123", "name":"Jean"},
        {"id": "124", "name":"toto"},
        {"id": "125", "name":"titi"},
        {"id": "126", "name":"tete"},
        {"id": "127", "name":"Antennes","children":[
            {"id":"128","name":"gymnase"},
            {"id":"129","name":"stade"},
            {"id":"130","name":"ecole"}
        ]}
    ]}

En faites la création d'ensemble de structure n'est pas un problème, il fallait juste faire attention au nombre de niveau crée lors la création des tableaux associatifs(tableau composé obligatoirement de la paire clé/valeur ex : "id"=>"1" ). Par niveau, je veux dire lorsqu'on insère un tableau dans un autre. C'est là qu'il faut faire attention smile .
Par exemple si j'avais fait :

    $ant[] = array(
    "id" => "1"
    ,"name" =>"Antennes"
    );

Au lieu de :

    $ant = array(
    "id" => "1"
    ,"name" =>"Antennes"
    );

Mon résultat aurait été :

    {"id":"1234","name":"Furil","children":[
        {"id": "123", "name":"Jean"},
        {"id": "124", "name":"toto"},
        {"id": "125", "name":"titi"},
        {"id": "126", "name":"tete"},{"0":
        {"id": "127", "name":"Antennes"},"children":[
            {"id":"128","name":"gymnase"},
            {"id":"129","name":"stade"},
            {"id":"130","name":"ecole"}
        ]}
    ]}

Voilà j'espère avoir bien expliquer pour ceux qui en auront besoin.

Merci et bonne journée ! smile

Dernière modification par furil (11-07-2013 07:32:03)

Hors ligne

Pied de page des forums