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 :

Manipulation de données JSON en PHP


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut Manipulation de données JSON en PHP
    Bonjour

    Je rencontre quelques problèmes pour manipuler des données JSON en PHP, notamment pour la suppression et l'ajout.


    Voici une partie de mon fichier JSON :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    {
      "entrees":
      [
        {
          "nom":"Oeufs du jour"
        },
     
        {
          "nom":"Oeufs tomate cerise du jour"
        },
     
        {
          "nom":"Carottes rapées"
        },
     
        {
          "nom":"Taboulet oriental"
        },
     
        {
          "nom":"Taboulet vert"
        },
     
        {
          "nom":"Taboulet meridionnal"
        },
     
        {
          "nom":"Mini penne"
        },
     
        {
          "nom":"Pommes de terre au thon"
        },
     
        {
          "nom":"Salade de lantilles aux échalottes"
        },
     
        {
          "nom":"Tartare de concombre"
        },
     
        {
          "nom":"Salade Alaska"
        },
     
        {
          "nom":"Tomates mozarella pesto"
        }
      ]
    }

    Et mon fichier PHP réduit à l'essentiel :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
     
    <?php
      $menu = file_get_contents("db-json/menu.json");
      $decodedMenu = json_decode($menu);
      $entrees = $decodedMenu->{"entrees"};
      $nbEntrees = count($entrees);
      $moyenneNbEntrees = ceil($nbEntrees / 2);
     
      if(isset($_POST["supprimer"]))
      {
        $id = $_POST["id"];
     
        if ($_POST["categorie"] == "entrees")
        {
          unset($entrees[$id]);
        }
     
        $encodedMenu = json_encode($decodedMenu);
        file_put_contents("db-json/menu.json", $encodedMenu);
      }
     
      if(isset($_POST["modifier"]))
      {
        $id = $_POST["id"];
     
        if ($_POST["categorie"] == "entrees")
        {
          $entrees[$id]->{"nom"} = $_POST["nom"];
        }
      }
     
      if(isset($_POST["ajouter"]))
      {
        if ($_POST["categorie"] == "entrees")
        {
          array_push($entrees, array('nom' => $_POST["nom"]));
        }
      }
    ?>
     
    <div class="flexStart">
      <ul>
        <?php
          for($i = 0; $i < $moyenneNbEntrees; $i++)
          {
            echo
            '
              <li>
                <form method="post" action="interface-admin.php">
                  <input type="text" name="nom" value="' . $entrees[$i]->{"nom"} . '" />
                  <input type="hidden" name="id" value="' . $i . '" />
                  <input type="hidden" name="categorie" value="entrees" />
                  <button name="modifier"> Modifier </button>
                  <button name="supprimer"> Supprimer </button>
                </form>
              </li>
            ';
          }
        ?>
      </ul>
     
      <ul>
        <?php
          for($i = $moyenneNbEntrees; $i < $nbEntrees; $i++)
          {
            echo
            '
              <li>
                <form method="post" action="interface-admin.php">
                  <input type="text" name="nom" value="' . $entrees[$i]->{"nom"} . '" />
                  <input type="hidden" name="id" value="' . $i . '" />
                  <input type="hidden" name="categorie" value="entrees" />
                  <button name="modifier"> Modifier </button>
                  <button name="supprimer"> Supprimer </button>
                </form>
              </li>
            ';
          }
        ?>
      </ul>
    </div>
     
    <form method="post" action="interface-admin.php">
      <label for="nom"> Ajouter une entrée </label>
      <input type="text" name="nom" id="nom" placeholder="Nom" />
      <input type="hidden" name="categorie" value="entrees" />
      <button name="ajouter"> Ajouter </button>
    </form>

    Alors le problème c'est que lorsque je clique sur un des boutons supprimer, deux erreurs apparaissent à l'emplacement de l'entrée que je souhaitais supprimer :

    Notice: Undefined offset: numéro de la ligne que je souhaite supprimer in monfichier.php on line ligne correspondante au input de mon formulaire de suppression
    Notice: Trying to get property 'nom' of non-object in monfichier.php on lineligne correspondante au input de mon formulaire de suppression

    Pour l'ajout aucune erreur ne s'affiche quand j'envoi le formulaire mais l'ajout ne se fait pas.


    Merci d'avance pour votre aide !

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    1. Les deux Notices: Tu as retiré un élément de ton tableau $entrees avec unset($entrees[$id]) donc il est normal qu'il y ait un trou dedans et l'index $id n'existe plus. Donc quand par la suite tu le parcours avec une de tes boucles for (pourquoi y en a t'il deux? quel est l'intérêt?), quand la variable $i atteint la valeur de l'index $id on tombe sur $entrees[$i] qui n'existe plus.
    2. Pourquoi les ajouts et les suppressions ne marchent pas: c'est simple, tu modifies $entrees qui n'est que la copie d'une partie de $decodedMenu, puis tu retransformes $decodedMenu en json pour ensuite l'enregistrer. À aucun moment $decodedMenu n'a été modifié, tu as juste modifié $entrees.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    On utilise de préférence foreach() pour parcourir l'array.

    Avec un compteur si tu veux séparer en 2 listes ul/li : moitié = ceil(count($array)/2))

  4. #4
    Membre régulier
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut
    Salut à vous et merci pour vos réponses !


    Alors CosmoKnacki c'est ce que j'avais cru comprendre pour les deux notices sauf que je pensais que si, par exemple, je supprime le premier champ de mon tableau $entrees, le deuxième devrait donc devenir le premier non ? Tu vois ce que je veux dire ??? Et du coup il ne devrait pas y avoir de "trou" dedans...

    Pour ce qui est des deux boucles, l'intérêt est que j'aimerais afficher le tableau sur deux colonnes cote à cote ! Du coup obligé de faire deux boucles.

    Pour ton deuxième point $entrees correspond à $decodedMenu->{"entrees"}; donc quand je modifie $entrees je modifie forcèment $decodedMenu... Après c'est vrai que sur mon post j'ai oublié de mettre $encodedMenu = json_encode($decodedMenu); et file_put_contents("db-json/menu.json", $encodedMenu); à la fin des if mais considère qu'ils y sont


    jreaux62 j'entend bien que le foreach est mieux pour les tableaux sauf que je ne peux pas l'utilisé dans mon cas puisque j'ai besoin de faire deux liste séparées et tu verras en regardant mon code que j'utilise déjà ceil quand je fait $moyenneNbEntrees = ceil($nbEntrees / 2);


    Voila donc je ne vois pas trop comment je pourrais faire...

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Pour ton deuxième point $entrees correspond à $decodedMenu->{"entrees"}; donc quand je modifie $entrees je modifie forcèment $decodedMenu...
    Non c'est faux. Car $entrees n'est pas lié à $decodedMenu, c'est une copie du tableau $decodedMenu->{"entrees"}, et les modifications que tu appliques sur cette copie ne sont pas répercutées comme par magie sur l'original.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    • Avec for(...), il faut OBLIGATOIREMENT que les index se suivent.
    • Avec foreach(...), ce n'est pas nécessaire (et c'est l'avantage !).


    Exemple, en générant 2 listes :
    Code php : 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
    <?php
    $array = [
    	11 => 'onze',
    	22 => 'vingt deux',
    	33 => 'trente trois',
    	44 => 'quarante quatre',
    	55 => 'cinquante cinq',
    	];
     
    // 2 listes, coupées à la moitié
    $moitie = ceil(count($array)/2);
    $compteur = 0;
    echo '<ul>'."\n";
    foreach( $array as $idx => $val )
    {
    	echo '  <li>'.$idx.' : '.$val.'</li>'."\n";
    	$compteur++; // on incrémente
    	// on coupe à la moitie
    	if( $compteur == $moitie )
    	{
    		echo '</ul>'."\n"; // on change de liste
    		echo '<ul>'."\n";
    	}
    }
    echo '</ul>'."\n";
    ?>
    On obtient bien :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <ul>
      <li>11 : onze</li>
      <li>22 : vingt deux</li>
      <li>33 : trente trois</li>
    </ul>
    <ul>
      <li>44 : quarante quatre</li>
      <li>55 : cinquante cinq</li>
    </ul>

    Pour info :
    ."\n" (avec double-quote obligatoires) permet juste de faire un saut de ligne dans le code.
    C'est plus "propre".

  7. #7
    Membre régulier
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Non c'est faux. Car $entrees n'est pas lié à $decodedMenu, c'est une copie du tableau $decodedMenu->{"entrees"}, et les modifications que tu appliques sur cette copie ne sont pas répercutées comme par magie sur l'original.
    Oui $entrees est une copie de $decodedMenu->{"entrees"} mais les modifications que j'appliques ne sont pas répercutées comme par magie sur l'original, elles le sont grace à $encodedMenu = json_encode($decodedMenu); et file_put_contents("db-json/menu.json", $encodedMenu);. Je procède exactement de la même manière avec la modification et ca fonctionne, les motifs se font sur mon JSON donc bon...

    Merci jreaux je n'aurais pas pensé à faire comme ça mais ca fait un peu code bidouillé je trouve... Y a vraiment pas moyen de faire pareil avec un for ??? Sinon tampis je vais utiliser ta méthode !

  8. #8
    Invité
    Invité(e)
    Par défaut
    Ah ?
    Parce que tu trouves ton code plus "propre" ?


    Cela dit, il existe une solution simple, en CSS, pour obtenir 2 colonnes (avec une seule liste, et sans "bidouille") : CSS - columns

  9. #9
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Bon, comme tu sembles ne pas comprendre voici un code simplifier pour te montrer que tout ce que tu peux faire sur $entrees (la copie) ne modifie pas $decodedMenu (l'original):
    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
    <?php
     
    $json = <<<'EOD'
    {
      "entrees":
      [
        {
          "nom":"Oeufs du jour"
        },
     
        {
          "nom":"Oeufs tomate cerise du jour"
        }
      ]
    }
    EOD;
     
    $decodedMenu = json_decode($json);
     
    $entrees = $decodedMenu->entrees;
     
    unset($entrees[0]);
     
    var_dump($entrees);
    // array(1) { [1]=> object(stdClass)#3 (1) { ["nom"]=> string(27) "Oeufs tomate cerise du jour" } }
    var_dump($decodedMenu->entrees);
    // array(2) { [0]=> object(stdClass)#2 (1) { ["nom"]=> string(13) "Oeufs du jour" } [1]=> object(stdClass)#3 (1) { ["nom"]=> string(27) "Oeufs tomate cerise du jour" } }
    Au passage, tu peux aussi voir que $entrees n'a plus d'index 0.

    Un peu de lecture: Les opérateurs d'affectations

  10. #10
    Invité
    Invité(e)
    Par défaut
    Avec CosmoKnacki, on apprend toujours des trucs...

    1- Si j'a bien tout compris, il faut affecter le nouveau tableaux à l'objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      if(isset($_POST["supprimer"]))
      {
        $id = $_POST["id"];
     
        if ($_POST["categorie"] == "entrees")
        {
          unset($entrees[$id]);
        }
        $decodedMenu->entrees = $entrees; // on affecte les nouvelles valeurs
        $encodedMenu = json_encode($decodedMenu);
     
        file_put_contents("db-json/menu.json", $encodedMenu);
      }
    J'ai bon ?

    2- Au passage, $decodedMenu->{"entrees"} s'écrit plus simplement $decodedMenu->entrees.
    J'ai (re)bon ?

    3- On peut aussi ré-organiser les index après suppression avec array_values().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	  $entrees = array_values( $entrees ); // on ré-affecte de nouvelles clés
    	  $decodedMenu->entrees = $entrees; // on affecte les nouvelles valeurs
    	  $encodedMenu = json_encode($decodedMenu);
    Ainsi, on peut continuer à utiliser for() * sans "trou".

    * cela foreach() est à privilégier.
    Dernière modification par Invité ; 14/11/2018 à 16h00.

  11. #11
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    1- Si j'a bien tout compris, il faut affecter le nouveau tableaux à l'objet
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //...
    $decodedMenu->entrees = $entrees; // on affecte les nouvelles valeurs
    //..
    Exactement, voire même se passer carrément de la variable $entrees et travailler directement sur $decodedMenu->entrees (ou alors définir $entrees comme une référence vers $decodedMenu->entrees en écrivant au départ $entrees = &$decodedMenu->entrees de cette manière $entrees n'est plus une copie mais désigne bien le même tableau que $decodedMenu->entrees, mais tous le monde n'aime pas les références en PHP.)

    À mon avis la solution des deux colonnes via css est à privilégier (car c'est juste une question de présentation et pas de sémantique).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $entrees = array_values( $entrees ); // on ré-affecte de nouvelles clés
    $decodedMenu->entrees = sort($entrees); // on affecte les nouvelles valeurs
    $encodedMenu = json_encode($decodedMenu);
    Utiliser array_values() est une bonne ruse, par contre je ne vois pas trop pourquoi utiliser sort() ( en tout cas pas comme ça, sort() modifie le tableau "in place" et renvoie un booléen).

  12. #12
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    ...(ou alors définir $entrees comme une référence vers $decodedMenu->entrees en écrivant au départ $entrees = &$decodedMenu->entrees ..., mais tous le monde n'aime pas les références en PHP.)
    Tout juste !
    J'y avais pensé, mais je n'ai jamais utilisé les "références" : trop "abstrait" (et source d'erreur ou d'incompréhension) pour moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    À mon avis la solution des deux colonnes via css est à privilégier (car c'est juste une question de présentation et pas de sémantique).
    AUTRE AVANTAGE important : il suffit de modifier le CSS (via media queries) pour passer de 2 colonnes à 1 seule, ou encore à 3 colonnes !

    Ce qui n'est pas possible* avec 2 listes <ul><li>
    (*de les passer en 3 colonnes)


    ...par contre je ne vois pas trop pourquoi utiliser sort() ...
    Oups !
    J'avais oublié de l'enlever (c'était un précédent test...).
    (j'ai corrigé mon précédent message)

  13. #13
    Membre régulier
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut
    Oh je vois que vous avez été réactifs c'est cool merci !

    Ah ?
    Parce que tu trouves ton code plus "propre" ?
    Non pas vraiment tu as raison

    Du coup j'ai utilisé ta méthode qui coupe le ul dans le foreach ca fonctionne niquel !

    L'idée d'utilisé la propriété columns me plaisais d'avantage, je ne la connaissais pas ! Elle ne m'a finalement pas convenu car elle semble limitée au niveau de sa personnalisation.
    Par exemple, je n'ai pas réussis à aligner les colonnes en haut.

    Du coup il ne me reste plus que l'ajout à faire fonctionner.
    Je pense que le problème vient de mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_push($entrees, array('nom' => $_POST["nom"]));
    qui est destiné aux tableaux. Or je n'utilise pas le true dans le , et donc je ne récupère pas un tableau mais un objet.

    Du coup quel serait l'équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_push($entrees, array('nom' => $_POST["nom"]));
    mais pour des objets ???

  14. #14
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Citation Envoyé par TooKi Voir le message
    L'idée d'utilisé la propriété columns me plaisais d'avantage, je ne la connaissais pas ! Elle ne m'a finalement pas convenu car elle semble limitée au niveau de sa personnalisation.
    Par exemple, je n'ai pas réussis à aligner les colonnes en haut.
    Creuse un peu plus, tu dois pouvoir le personnaliser comme tu le souhaites, et en plus c'est la meilleur méthode (plutôt que de multiplier des balises qui n'ont aucun sens).

    Du coup il ne me reste plus que l'ajout à faire fonctionner.
    Je pense que le problème vient de mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_push($entrees, array('nom' => $_POST["nom"]));
    qui est destiné aux tableaux. Or je n'utilise pas le true dans le , et donc je ne récupère pas un tableau mais un objet.

    Du coup quel serait l'équivalent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array_push($entrees, array('nom' => $_POST["nom"]));
    mais pour des objets ???
    Non. $entrees reste un tableau pas un objet et ce, que tu ais utilisé le paramètre true ou pas avec json_decode (Sans le paramètre true, donc avec false par défaut, json_decode() va renvoyer une structure ou chaque sous-ensemble JSON (partie encadrée par des {}) donnera une instance de stdClass, mais les tableaux contenus dans le JSON ne sont pas des sous-ensembles JSON, ce sont seulement des tableaux et ils le resteront). Tu devrais pratiquer un peu plus le var_dump() pour visualiser tout ça.

    Pour ajouter un élément dans ta liste d'entrées tu dois donc créer une nouvelle instance de stdClass et lui donner les bons attributs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $elt = new stdClass();
    $elt->nom = 'bulots';
    $entrees[] = $elt; // ou array_push($entrees, $elt); pour être compatible avec PHP < 5.4
    ou plus court mais avec un transtypage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $entrees[] = (object)['nom'=>'bulots'];

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- pour revenir sur CSS - columns :
    Inconvénient : la 2ème colonnes ne prend pas en compte le margin-top des <li> (sur le 1er élément) : ce qui explique le "décalage" des 2 colonnes.

    La solution simple est de définir un margin-top:0; sur les <li>.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <ul>
      <li>11 : onze</li>
      <li>22 : vingt deux</li>
      <li>33 : trente trois</li>
      <li>44 : quarante quatre</li>
      <li>55 : cinquante cinq</li>
    </ul>
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ul {
      -webkit-columns: 2; /* préfixe obligatoire, au moins pour Safari */
      -moz-columns: 2;
      columns: 2;
      border:1px dashed #ccc; /* pour démo */
    }
    ul li {
      margin-top:0;
      line-height:1.4em; /* pour démo */
    }
    En CSS, passer à 1, 2, 3, 4 colonnes ou + est donc très simple.

    Je l'utilise souvent pour des (longues) listes de checkbox, par exemple,
    ou pour scinder en 2 (ou +) le contenu texte d'un article sur écran large (façon "colonnes de journal") (exemple)

    2- Concernant la création d'objet PHP :

    Dernière modification par Invité ; 15/11/2018 à 09h58.

  16. #16
    Membre régulier
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut
    Yes CosmoKnacki ça fonctionne niquel avec $entrees[] = (Object)['nom'=>'ma nouvelle entree'];

    J'ai également utilisé des références pour modifier mes tableaux c'est parfait (A part qu'au début ça à casser tout mon code car les count semblent impossibles sur les références, du coup j'ai directement effectués les count sur $decodedMenu->macategorie)

    Par contre vraiment je ne suis pas à l'aide avec la propriété columns je vais garder l'autre méthode qui m'offre une plus grande liberté comme utiliser des propriétés flexbox comme j'ai l'habitude de faire...

    En tout cas merci infiniment à vous deux pour tous vos conseils ! Tout fonctionne comme je le souhaitais

    A la revoyure !

  17. #17
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    les count semblent impossibles sur les références
    Les trois quarts du temps, un code ne fonctionne pas pour des raisons à la ***, ne va pas inventer des choses qui n'existent pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    php > $toto = ['ab', 'vf', 'kj'];
    php > $titi = &$toto;
    php > echo count($titi);
    3
    Une référence ça n'est rien d'autre qu'une variable qui partage le même contenu qu'une autre variable.

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

Discussions similaires

  1. chatJs lire de données json en php
    Par Mika2008 dans le forum jQuery
    Réponses: 1
    Dernier message: 05/05/2015, 11h14
  2. Récupération de données JSON d'un script PHP
    Par Nickonet dans le forum Android
    Réponses: 5
    Dernier message: 12/08/2012, 18h18
  3. [AJAX] json recuperer des donneés envoyé par php
    Par karimphp dans le forum AJAX
    Réponses: 1
    Dernier message: 14/05/2010, 11h13
  4. [MySQL] manipulation des données via PHP
    Par baouk2000 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 20/03/2010, 00h24
  5. Réponses: 2
    Dernier message: 19/06/2009, 14h21

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