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 :

Foreach avec For ? je nage là. [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2013
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Foreach avec For ? je nage là.
    Bonjour,
    Question de débutant.
    Pourquoi je n'arrive pas à afficher les valeurs de mon tableau imbriqué comme je le veux ?

    Qu'est ce que je n'ai pas compris avec cette boucle foreach ?

    Dans mon imaginaire je pensais pour afficher mes donnée de cette manière:
    En gras la valeur de mon premier tableau et les fruits a coté sont les valeurs de mon deuxième tableau (celui qui est imbriqué).
    Hiver Orange, Mandarine, Pamplemousse, Kiwi
    printempsPomme, ananas, avocat, dattes
    ...

    J'ai essayé avec For et For mais j'obtiens une notice.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $tabFruitsSaison = array(
        "hiver"=> array ( "Orange", "Mandarine","Pamplemousse","Kiwi"),
        "printemps"=> array ( "Pomme", "ananas","avocat","dattes"),
        "ete"=> array ( "Cerise", "Abricot","pêche","Framboise"),
        "automne"=> array ( "figue", "prune","groseille","nèfle")
    );
    Et ma belle boucle Foreach grrr.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        foreach($tabFruitsSaison as $k=>$v ){     
            echo $k, $v[1]; // marche pour une valeur
     
            for($v =0; $v < 5; $v ++){
                echo "$v"; // ne marche pas mais c'est l'idée 
            }
        }
    Je sais pas suis je suis suffisamment claire dans la demande.

    Je vous remercie pour le temps que vous accorderais à ma demande.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2013
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Petite Avancé.
    Voilà ce que j'obtiens grâce à un tuto.

    hiver : Orange
    hiver : Mandarine
    hiver : Pamplemousse
    hiver : Kiwi
    printemps : Pomme
    printemps : ananas
    printemps : avocat
    printemps : dattes
    ete : Cerise
    ete : Abricot
    ete : pêche
    ete : Framboise
    automne : figue
    automne : prune
    automne : groseille
    automne : nèfle

    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
     
    $tabFruitsSaison = array(
        "hiver"=> array ( "Orange", "Mandarine","Pamplemousse","Kiwi"),
        "printemps"=> array ( "Pomme", "ananas","avocat","dattes"),
        "ete"=> array ( "Cerise", "Abricot","pêche","Framboise"),
        "automne"=> array ( "figue", "prune","groseille","nèfle")
    );
     
    // La première boucle pour parcourir l'ensemble des clés
        foreach ($tabFruitsSaison as $k => $v) {
            echo'<div>';
        //La deuxième boucle pour parcourir toutes les valeurs associées à une clé
            foreach ($tabFruitsSaison [$k] as $nomFruit){
                echo('<div class=\'fruits\'>'.$k.' : '.$nomFruit."</div>");
            }
            echo'</div>';
       };
    Donc je pense que j'ai compris ce qui ne va pas dans mon raisonnement.
    je pensais que l'affichage des fruits serais sur une seul ligne mais non.

    Donc pour obtenir ce que je veut il faudrait que je parcours et range dans un autre tableau.

    Je ne sais pas pourquoi j'obtenais toujours de notice mais avec les crochets sur ma cle [$k] du second foreach sa marche. Mais je ne sais pas pourquoi.
    si une personne pouvais m'explique car je me noie là. entre le bouquin pas très digeste et les différent tuto je ne sais plus trop ou je me perd avec cet boucle et les tableaux multidimensionnel associatif.

    Merci A+

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Tu peux écrire ton script comme ceci :

    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
    $tabFruitsSaison = [
        "hiver"=> ["Orange", "Mandarine","Pamplemousse","Kiwi"],
        "printemps"=> ["Pomme", "ananas","avocat","dattes"],
        "ete"=> ["Cerise", "Abricot","pêche","Framboise"],
        "automne"=> ["figue", "prune","groseille","nèfle"],
    ];
     
        // La première boucle pour parcourir les éléments de $tabFruitsSaison [saison => fruits[]]
    foreach ($tabFruitsSaison as $saison => $fruits) {
        echo '<div>';
        // La deuxième boucle pour parcourir les fruits d'une saison
        foreach ($fruits as $nomFruit) {
            echo "<div class='fruits'>{$saison} : {$nomFruit}</div>";
        }
        echo '</div>';
    }
    je pensais que l'affichage des fruits serais sur une seul ligne mais non.
    Ben non, le <div> provoque un retour à la ligne

    Donc pour obtenir ce que je veut il faudrait que je parcours et range dans un autre tableau.
    Pas forcément, si tu veux afficher les fruits sur une ligne unique tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    foreach ($tabFruitsSaison as $saison => $fruits) {
        echo '<div>';
        // La deuxième boucle pour parcourir les fruits d'une saison
        echo "{$saison} :";
        foreach ($fruits as $nomFruit) {
            echo " {$nomFruit}";
        }
        echo '</div>';
    }
    Si tu veux que chaque fruit soit séparé d'une virgule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach ($tabFruitsSaison as $saison => $fruits) {
        echo '<div>';
        echo "{$saison} : ", implode(', ', $fruits);
        echo '</div>';
    }
    implode() => https://php.net/implode

  4. #4
    Membre à l'essai
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2013
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup pour tout tes exemples.
    J'ai vraiment l'art de me torturer la cervelle.

    je vais abuser mais pourquoi les accolades {} autour des variables? ou mème les [].

    bien que je soit au début du livre la partie qui traite des tableaux ne mentionne pas cette syntaxe.

    Encore merci.

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    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 912
    Points : 6 705
    Points
    6 705
    Par défaut
    La solution pour ne pas se triturer le cerveau ou être en proie à son imaginaire c'est de s'en référer au manuel PHP.

    Les accolades servent uniquement à délimiter les variables interprétées au sein d'une chaîne entre double quotes. Pour ce qui est des crochets, il s'agit d'une syntaxe alternative à array() disponible depuis la version 5.4 de PHP (comme quoi ça date, donc si ton livre/tutoriel date de 1912 laisse tomber et trouve quelque chose de plus récent, ou encore une fois -> manuel PHP).

    À propos des balises div et de l'affichage en ligne ou à la ligne, il faut bien comprendre que l'affichage ne dépend pas des balises utilisées. Certes, les navigateurs ont à peu prés le même comportement par défaut avec les balises et produisent plus ou moins le même affichage, néanmoins une balise est juste un moyen de délimiter les données (comme en XML) qui n'a rien à voir avec le rendu visuel. Le rendu peut être totalement assuré par le CSS. Les balises ont donc uniquement un rôle sémantique.

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fraxinus13 Voir le message
    je vais abuser mais pourquoi les accolades {} autour des variables?
    En lisant Séb., je me suis posé la même question (en fait, je l'avais déjà vu mais oublié) et Cosmo a donné la réponse
    Citation Envoyé par CosmoKnacki Voir le message
    Les accolades servent uniquement à délimiter les variables interprétées au sein d'une chaîne entre double quotes.
    Pour être sûr d'avoir compris, j'ai codé un test :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $a="test";
    echo "ceci est un {$a}";

  7. #7
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    je vais abuser mais pourquoi les accolades {} autour des variables?
    1. Pour faciliter la lecture => On repère mieux la variable je trouve
    2. Pour délimiter les variables echo "J'aime les {$fruit}s"; => Sans les accolades on accède à $fruits et non $fruit
    3. Pour que les tableaux soient correctement interpolés echo "Item {$data['foo'][123]}\r\n"; => Erreur sans les {}
    4. On peut aussi intégrer des fonctions : $sql = "... WHERE field = {$pdo->quote($field)} LIMIT 10";
    => https://www.php.net/manual/fr/langua...arsing.complex

    ou mème les [].
    C'est la syntaxe courte de array(), ton livre est probablement obsolète s'il utilise encore array()

  8. #8
    Membre à l'essai
    Homme Profil pro
    Webdesigner
    Inscrit en
    Février 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2013
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    La solution pour ne pas se triturer le cerveau ou être en proie à son imaginaire c'est de s'en référer au manuel PHP.
    Bonjour et merci pour vos explications. En ce qui concerne le manuel php je partage tout a fait l'idée. J'y suis allée et remarqué les fonctions disponible pour manipuler les tableaux, mais malheureusement je n'ai pas encore la capacité à comprendre de quelle fonction j'ai besoin dans ce magnifique magasin. Mais sa viendra.

    Pour le reste le livre il me semble assez ressent il traite de php7, en plus il m'a été conseillé par une personne qui développe déjà depuis bien longtemps. Le livre donc c'est PHP et MySql édition eni de Olivier Heurtel et Brice-Arnaud Guerin.

    Et maintenant roulement de tambour cette syntaxe est bien aborder à la page 41 grrrr. je n'ai pas fait le liens et su voir la possibilité comme pour implode() je l'ai vue mais je n'ai pas su faire le lien avec mon problème.


    Bien, en tous cas je vous remercie à tous d'avoir pris sur votre temps pour m'aider et m’expliquè. je vous dit A+ car je pense que je reviendrais.

    Le livre en question et mes devoirs :

    Nom : IMG_20210512_095425.jpg
Affichages : 103
Taille : 153,1 Ko

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fraxinus13 Voir le message
    je pense que je reviendrais.
    J'ai appris plein de choses grâce aux nombreux experts trouvés sur DVP (dont certains modos, qui sont partis (jreaux62 ou rawsrc)). J'apprécie énormément ce forum.

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

Discussions similaires

  1. Invalid argument supplied for foreach() avec $_post
    Par Décibel dans le forum Langage
    Réponses: 8
    Dernier message: 01/10/2015, 08h54
  2. [PHP 5.4] manipulation les données d'un array avec foreach et for
    Par aspkiddy dans le forum Langage
    Réponses: 2
    Dernier message: 24/02/2014, 01h22
  3. [MS-DOS] Cibler un répertoire avec For
    Par Furius dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 08/12/2005, 18h49
  4. [VB.NET] Problème avec For Each...
    Par cyrcroix dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/06/2005, 11h49
  5. qbasic : pause avec FOR-NEXT
    Par clood200 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 08/08/2003, 17h51

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