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 :

Question foreach [Débutant(e)]


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut Question foreach
    Bonjour à tous et merci d'avance pour votre aide.

    Je part d'un .json que j'encode à l'aide json_decode et j'obtient ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    array (size=2)
      'txt_name' => 
        array (size=2)
          0 => string 'nom' (length=3)
          1 => string 'Debug' (length=5)
      'txt_phone' => 
        array (size=2)
          0 => string 'numéro de téléphone' (length=22)
          1 => string '000' (length=3)
    Ensuite une boucle foreach pour traiter le array.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	foreach ($arryTxtbox as $id => $value) { 
    		echo $id.' => '. $arryTxtbox[$id][0].': '.$arryTxtbox[$id][1].', ';
    	}
    Le code est fonctionnel, mais j'aurais juste voulu savoir pourquoi PHP m'annonce une erreur si j'enléve =>$value. Je n'utilise pas $value et dans différent tuoriaux le code fonctionne juste avec 'as'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach ($arr as $value) {
      code...
    }
     
    Merci à vous.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 29
    Par défaut
    http://php.net/manual/fr/control-structures.foreach.php

    Car dans ton code tu utilises la clé de ton tableau et dans un foreach as vague tu ne récupère pas la clé, juste la valeur

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Merci pour ta réponse gestrad.
    Mais cela n'est toujours pas clair pour moi.
    0 étant la clé et 'nom' la valeur, pour moi c'est clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    array (size=2)
      'txt_name' =>
    'txt_name' alors est une clé ou une valeur ?
    Merci,

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est simple : clef=>valeur

    "valeur" peut lui même être un tableau avec un clef et une valeur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Merci à vous deux.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Navré de revenir la dessus, mais je crois que j'ai rien compris du foreach.
    J'ai beau lire et relire sur php.net ça passe pas.

    Généré à partir de deux groupes de case à cocher d'un formulaire.
    Seul les cases à cocher activer y sont référencé.

    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
     
    array (size=2)
      'chx_sports' => 
        array (size=1)
          'Sport favoris' => 
            array (size=1)
              0 => string 'football' (length=8)
      'chx_hobby' => 
        array (size=1)
          'Passe-temps' => 
            array (size=4)
              0 => string 'photo' (length=5)
              1 => string 'peinture' (length=8)
              2 => string 'lecture' (length=7)
              3 => string 'musique' (length=7)
    Mon code est une calamité, mais l'idée est la.
    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
     
    if (isset($extractData["arryCheckbox"])){
     
    	$arryCheckbox = $extractData["arryCheckbox"];
    	var_dump($arryCheckbox);
    	foreach ($arryCheckbox as $id => $value) {
     
    		$$id = '<h2>'.$arryCheckbox[intutilé du groupe].'</h2>';
    		$id .= '<ul>';
     
    		foreach ($arryCheckbox[$id] as $key => $value) {
     
    			$id .='<li>'.$arryCheckbox[valeur].'</li>'
    		}
     
    		$id .= '</ul>';
     
    	}
    }
     
    echo $chx_sports;
    Merci à vous,

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    quelque chose dans ce genre devrait faire l'affaire
    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
    <?php
     
    $data = array(
        'chx_sports' => array (
            'Sport favoris' => array (
                0 => 'football'
        )),
        'chx_hobby' => array (
            'Passe-temps' => array (
                0 => 'photo',
                1 => 'peinture',
                2 => 'lecture',
                3 => 'musique'
        ))
    );
     
    $html = array();
     
    foreach ($data as $k => $v)
    {
        foreach ($v as $groupe => $choix)
        {
            $html[] = "<h2>{$groupe}</h2>";
            $html[] = '<ul>';
     
            foreach ($choix as $item)
            {
                $html[] = "<li>{$item}</li>";
            }
     
            $html[] = '</ul>';
        }
    }
     
    echo implode("\n", $html);
     
    ?>
    Pour éviter 3 foreach inclus : tu as aussi la version courte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach ($data as $k => $v)
    {
        foreach ($v as $groupe => $choix)
        {
            $html[] = "<h2>{$groupe}</h2>";
            $html[] = '<ul>'.implode("\n", array_map(function($p) { return "<li>{$p}</li>"; }, $choix)).'</ul>';
        }
    }

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Merci d'avoir été aussi complet dans ta réponse.
    J'ai opté pour la version courte et au passage j'ai appris la fonction array_map.
    Mille fois merci

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Désole de revenir la dessus encore.
    Je pensais pouvoir m'en sortir avec tout vos explications, mais ce n'est pas le cas.

    Enfin cela

    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
     
    array (size=1)
      'tab_value' => 
        array (size=1)
          'Liste valeurs' => 
            array (size=4)
            array (size=4)
              0 => string 'Nom' (length=3)
              1 => string 'Prénom' (length=7)
              2 => string 'Fonction' (length=8)
              3 => string 'Age' (length=3)
          1 => 
            array (size=4)
              0 => string 'Termark' (length=7)
              1 => string 'Olivier' (length=7)
              2 => string 'Gérant' (length=7)
              3 => string '30' (length=2)
          2 => 
            array (size=4)
              0 => string 'Godivar' (length=7)
              1 => string 'Marc' (length=4)
              2 => string 'Président' (length=10)
              3 => string '42' (length=2)
          3 => 
            array (size=4)
              0 => string 'Walkoot' (length=7)
              1 => string 'Cédrique' (length=9)
              2 => string 'Ouvrier' (length=7)
              3 => string '27' (length=2)
    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
     
    	foreach ($arryTable as $id => $array) {
    		foreach ($array as $label => $array2) {
    			$$id = '<h2>'.$label.'</h2>';
    			$$id .='<table>';
    			foreach ($array2 as $row => $value) {
    				if ($row == 0) {$tag = 'th';} else {$tag ='td';};
    				$$id .= '<tr>'.implode("\n", array_map(function($p) { return "<{$tag}>{$p}</{$tag}>"; }, $value)).'</tr>';
    			}
    			$$id .='</table>';
    		}
    		echo $$id;
    	}
     
    	unset($id, $array, $label, $array2, $row, $value, $tag);
    Ligne 8, je souhaite utilise la balise <th> pour le premier traitement et <td> pour tout les autres. Aussi j'aurais voulu avoir votre avis sur mon code.

    Merci,

  10. #10
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    je me demande si tu sais coder un tableau en HTML ?
    Le résultat final devrait être proche de ceci :
    Code html : 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
    <table>
        <thead>
            <tr>
                <th>en-tête colonne 1</th>
                <th>en-tête colonne 2</th>
                <th>en-tête colonne 3</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>donnée ligne 1 colonne 1</td>
                <td>donnée ligne 1 colonne 2</td>
                <td>donnée ligne 1 colonne 3</td>
            </tr>
            <tr>
                <td>donnée ligne 2 colonne 1</td>
                <td>donnée ligne 2 colonne 2</td>
                <td>donnée ligne 2 colonne 3</td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <td>bas du tableau colonne 1</td>
                <td>bas du tableau colonne 2</td>
                <td>bas du tableau colonne 3</td>
            </tr>
        </tfoot>
    </table>
    Reprends ton code pour t'en rapprocher.

    Un dernier point, pourquoi utilises-tu $$id ? Ton code ne nécessite pas de variables dynamiques (variable de variable). Lis bien les exemples, car je pense que tu ne saisis pas le fonctionnement de cette fonctionnalité.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Si je sais encoder un tableau html, mon code était juste une amorce.
    Et ce matin j y voyait un peu plus clair, j'ai donc fait ça:

    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
     
    if (isset($extractData["arryTable"])){
    	$arryTable = $extractData["arryTable"];
    	var_dump($arryTable['tab_value']);
    	foreach ($arryTable as $id => $array) {
    		foreach ($array as $label => $array2) {
    			$$id = '<h2>'.$label.'</h2>';
    			$$id .='<table>';
    			foreach ($array2 as $row => $value) {
     
    				if ($row == 0) {
    					$$id .= '<thead>';
    					$$id .= '<tr>'.implode("\n", array_map(function($p) { return "<th>{$p}</th>"; }, $value)).'</tr>';
    					$$id .= '</thead>';
    					$$id .= '<tbody>';
    				} else {
    					$$id .= '<tr>'.implode("\n", array_map(function($p) { return "<td>{$p}</td>"; }, $value)).'</tr>';
    				};
     
    			}
    			$$id .= '</tbody>';
    			$$id .='</table>';
    		}
    		echo $$id;
    	}
    	unset($id, $array, $label, $array2, $row, $value, $tag);
    }
    Qu'en pense tu ?
    Encore merci pour ton implode(array_map()), c'est très astucieux. Cela m'a beaucoup aidé et appris.

    L'idée du projet est un framework perso pour traiter tout mes envoies de formulaires.
    Celui-ci génère les portions html dont j'ai besoin, qu'il stock dans des variables dynamiques.
    A l'avenir je n'aurais plus qu'a taper le mail html et y injecter mes variables dynamiques.

  12. #12
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    c'est pas mal, mais tu ne devrais pas utiliser la variable de variable $$id et tu devrais penser à échapper les données avant de les afficher.
    Voici une version proche de la tienne :
    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
    if ( ! empty($extractData['arryTable']))
    {
        $html = array();
        // fonction d'échappement des caractères pour l'utf-8
        $hsc = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); };
        // fonction de rendu d'une case de tableau en y incluant l'échappement 
        $table_row = function($p, $tag) use ($hsc) { return "<{$tag}>{$hsc($p)}</{$tag}>"; };
     
        foreach ($extractData['arryTable'] as $id => $array)
        {
            foreach ($array as $label => $array2)
            {
                $html[] = "<h2>{$hsc($label)}</h2>";
                $html[] = '<table>';
     
                foreach ($array2 as $row => $value)
                {
                    if ($row == 0)
                    {
                        $html[] = '<thead>';
                        $html[] = '<tr>'.implode("\n", array_map($table_row($p, 'th'), $value)).'</tr>';
                        $html[] = '</thead>';
                        $html[] = '<tbody>';
                    }
                    else
                    {
                        $html[] = '<tr>'.implode("\n", array_map($table_row($p, 'td'), $value)).'</tr>';
                    };
                }
                $html[] = '</tbody>';
                $html[] = '</table>';
            }
        }
        echo implode("\n", $html);
    }
    Bon courage pour ton framework

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    477
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 477
    Par défaut
    Merci rawsrc pour ton aide et ces mots d'encouragements

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

Discussions similaires

  1. <c:ForEach> question .
    Par Logic_613 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/08/2013, 12h28
  2. question sur le foreach
    Par pelloq1 dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2010, 19h12
  3. [Tableaux] Question sur foreach
    Par jpascal dans le forum Langage
    Réponses: 5
    Dernier message: 09/04/2008, 11h42
  4. [Tableaux] Question de résultat issu d'un foreach
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 14/02/2006, 10h21
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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