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 :

Syntaxe pour un array à deux colonnes [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 131
    Points : 72
    Points
    72
    Par défaut Syntaxe pour un array à deux colonnes
    Bonsoir à tous,
    Bon précision : je suis débutant en PHP et cette question a du être posée mille trois cent fois au moins !!!!

    Voilà je voulais savoir si la syntaxe suivante était correcte :
    Ma problématique : construire un tableau avec 2 données : un identifiant et un nom de user
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $user[0] = array ('id'=>1 , 'nom' =>'Moi' );
    $user[1] = array ('id'=>2 , 'nom' =>'Lui' );
    $user[2] = array ('id'=>3 , 'nom' =>'Eux' );
    Je ne suis pas sur du tout de cette syntaxe.

    Ce tableau doit ensuite me servir à alimenter une zone de liste (=select) dans un fichier HTML.
    Je précise que c'est une variable gérée par un framework de template qui envoie le résultat du PHP dans le HTML. J'espère avoir été clair là.

    Là ou je coince aussi c'est dans le parcours de mon tableau pour obtenir le contenu qui va alimenter mon select.

    Je pensais utiliser une variable $ligne qui finalement contiendrait la partie HTML de la construction d'un select enrichie des données dynamiques de mon tableau.

    Pourriez-vous me filer un petit coup de main s'il vous plait ?
    D'avance merci à ceux qui pourront m'aider

    Bonnes fêtes à tous

    Edit : et si je faisais plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $users = array (
                    array('id'=>1, 'nom'=>'Moi'),
                    array('id'=>2, 'nom'=>'Lui'),
                    array('id'=>3, 'nom'=>'Eux')
                 );
    Cela me parait plus propre.

  2. #2
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est plus une question de gout entre tes deux écritures même si la deuxième a l'avantage de (re)créer le tableau, ce qui évite d'être victime de données résiduelles si tu utilises la variable avant dans le code.

    Dans l'idée d'un select, plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $users = array (1=>'Moi', 2=>'Lui',  3=>'Eux');
    echo '<select>';
    foreach($users as $id=>$nom) {
    echo '<option value="' . $id . '">' . $nom . '</option>';
    }
    echo '</select>';

  3. #3
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 131
    Points : 72
    Points
    72
    Par défaut
    Merci pour cette réponse qui va me servir et que je comprends
    Si je veux stocker cela dans une variable, est-ce que cette syntaxe est correcte ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($users as $id=>$nom) {
    $contenuSelect = " '<option value="' . $id . ' ">' . $nom . '</option>' ";
    }
    J'ai cru lire par ailleurs qu'il faudrait ajouter un \n pour simuler un retour ligne.
    Dois-je rajouter le echo quand on sait que la variable va être passée au HTML par l'intermédiaire de FastTemplate ?

    Merci encore à vous

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Comme ça alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($users as $id=>$nom) {
    $contenuSelect .= '<option value="' . $id . ' ">' . $nom . '</option>' ."\r\n";
    }

  5. #5
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 131
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Comme ça alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($users as $id=>$nom) {
    $contenuSelect .= '<option value="' . $id . ' ">' . $nom . '</option>' ."\r\n";
    }
    Merci pour cette réponse
    Je teste ça dans mon environnement et reviens vous dire
    Merci encore
    Bonne journée

  6. #6
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 131
    Points : 72
    Points
    72
    Par défaut
    C'est encore moi
    Donc voici ma fonction
    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
     
    function listUserValidation (){
            $this->select = '';
            $users = array (
                            array('id'=>1, 'nom'=>'Moi'),
                            array('id'=>2, 'nom'=>'Lui'),
                            array('id'=>3, 'nom'=>'Eux'),
                            array('id'=>4, 'nom'=>'Nous')
                    );
     
            foreach($users as $id=>$nom) {
                $this->select .= '<option value="' . $id . ' ">' . $nom . '</option>' ."\r\n";
                }
     
           return $this->select;
    Par contre dans mon select n'apparait que 4 items nommés Array
    Je n'arrive pas à voir ce que je n'ai pas bien fait pour que cela affiche Moi, Lui, Eux et Nous et que quand j'en sélectionne un ce soit bien la valeur de l'id correspond qui soit envoyé.

    Merci de votre aide

  7. #7
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Tu as des tableaux imbriqués, il te faut donc deux foreach.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    foreach($users as $user) {
                foreach($user as $id=>$nom){
                     $this->select .= '<option value="' . $id . ' ">' . $nom . '</option>' ."\r\n";
                }
    }
    //re-edit apparement, ça, ça va pas ^^"
    edit: ou comme dit plus bas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    foreach($users as $user) {
                     $this->select .= '<option value="' . $user['id'] . ' ">' . $user['nom'] . '</option>' ."\r\n";
    }

  8. #8
    Membre régulier Avatar de Vicrabb
    Femme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 66
    Points : 102
    Points
    102
    Par défaut
    C'est parce que tu parcours un tableau contenant des tableaux sans lui demander de rentrer dans ceux-ci.

    Perso, je préfère la syntaxe de sabotage pour ton tableau si tu veux utiliser le foreach tel quel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function listUserValidation (){
            $this->select = '';
            $users = array (1=>'Moi', 2=>'Lui',  3=>'Eux');
     
     
            foreach($users as $id=>$nom) {
                $this->select .= '<option value="' . $id . ' ">' . $nom . '</option>' ."\r\n";
                }
     
           return $this->select;}
    Sinon, essaie de mettre le nom de la colonne si tu fais un seul foreach:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            foreach($users as $user) {
                $this->select .= '<option value="' . $user['id'] . ' ">' . $user['nom'] . '</option>' ."\r\n";
                }
    ou alors un double foreach:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
            foreach($users as $user) {
                foreach($user as $id=>$nom){
                      $this->select .= '<option value="' . $id . ' ">' . $nom . '</option>' ."\r\n";
                }

  9. #9
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    dans ta configuration, ça serait :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    foreach($users as $id=>$nom) {
                $this->select .= '<option value="' . $nom['id'] . ' ">' . $nom['nom'] . '</option>' ."\r\n";
                }

  10. #10
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 131
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par radicaldreamer Voir le message
    Tu as des tableaux imbriqués, il te faut donc deux foreach.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach($users as $user) {
                foreach($user as $id=>$nom){
                     $this->select .= '<option value="' . $id . ' ">' . $nom . '</option>' ."\r\n";
                }
    }
    Merci à toi mais...
    C'est presque ça parce que cela m'affiche aussi le champ Id sur une ligne.
    J'ai donc 8 lignes 2 fois 4
    Alors que je ne veux que la valeur du champ $nom dans le select

    Merci

  11. #11
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 131
    Points : 72
    Points
    72
    Par défaut
    Ta solution fonctionne très bien et me retourne exactement ce que je souhaite comme résultat.
    Je te remercie toi et les autres de votre aide précieuse.
    Très bonne fin de journée à vous tous
    Et peut être à bientôt pour d'autres questions de débutants.

    MERCI ENCORE

  12. #12
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 131
    Points : 72
    Points
    72
    Par défaut
    C'est encore moi !!!

    J'ai une question complémentaire

    On suppose que mes informations ont été enregistrées dans ma table.
    Cela veut dire que dans un des champs j'ai un id sauvegardé et c'est tout.

    Mon appli me permet de réouvrir la page en mode consultation.
    Comment faire maintenant pour réafficher le bon nom en face de l'id présent en base de données dans ma page consultation ?

    Je suppose que je dois avoir le même tableau ce qui est logique puis faire un test avec l'id et l'équivalent dans le tableau ?

    Merci de votre aide

  13. #13
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Si je comprends bien,

    Il te faudrait soit que tu enregistres aussi le nom dans la bdd, soit (comme tu l'as dit) un array dans lequel tu mets tes noms et tu parcours le array en cherchant le nom approprié à l'id...

    Je ne sais pas si la réponse peut t'aider... ^^"

  14. #14
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 131
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par radicaldreamer Voir le message
    Si je comprends bien,

    Il te faudrait soit que tu enregistres aussi le nom dans la bdd, soit (comme tu l'as dit) un array dans lequel tu mets tes noms et tu parcours le array en cherchant le nom approprié à l'id...

    Je ne sais pas si la réponse peut t'aider... ^^"
    Merci de ta réponse
    Mais je ne peux enregistrer le nom dans la BD elle n'est pas prévue pour ça.
    Je cherche donc une fonction php propre aux array qui permet de rechercher la valeur du nom de mon user en fonction de l'id recherché.
    Pour l'instant je ne trouve que array_search qui si je comprends bien fait l'inverse

  15. #15
    Membre régulier Avatar de Vicrabb
    Femme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2010
    Messages : 66
    Points : 102
    Points
    102
    Par défaut
    Peut-être la fonction in_array()? Je veux dire par là que si ton tableau de noms a bien une colonne id (comme tu as mis plus haut), il y a peut-être moyen d'utiliser in_array dans un style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $id = 1;
    $users = array (
                            array('id'=>1, 'nom'=>'Moi'),
                            array('id'=>2, 'nom'=>'Lui'),
                            array('id'=>3, 'nom'=>'Eux'),
                            array('id'=>4, 'nom'=>'Nous')
                    );
     
    foreach($users as $user){
       if(in_array($id,$user)){
         echo $user['nom'];
      }
    }

  16. #16
    Membre régulier
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 131
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par Vicrabb Voir le message
    Peut-être la fonction in_array()? Je veux dire par là que si ton tableau de noms a bien une colonne id (comme tu as mis plus haut), il y a peut-être moyen d'utiliser in_array dans un style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $id = 1;
    $users = array (
                            array('id'=>1, 'nom'=>'Moi'),
                            array('id'=>2, 'nom'=>'Lui'),
                            array('id'=>3, 'nom'=>'Eux'),
                            array('id'=>4, 'nom'=>'Nous')
                    );
     
    foreach($users as $user){
       if(in_array($id,$user)){
         echo $user['nom'];
      }
    }
    En effet, j'ai aussi vu cette fonction
    Merci de ta syntaxe : elle m'a fait gagné du temps.

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

Discussions similaires

  1. [SP-2010] Syntaxe pour la validation de colonne
    Par swann7 dans le forum SharePoint
    Réponses: 8
    Dernier message: 30/07/2010, 17h40
  2. Syntaxe pour égalité entre deux lignes : var(i)=var(i+1)
    Par NemoParis dans le forum Débutez
    Réponses: 2
    Dernier message: 28/05/2010, 09h55
  3. Réponses: 2
    Dernier message: 14/07/2006, 18h37
  4. [Tableaux] Array sur deux colonnes et foreach..
    Par shadeoner dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2006, 08h46
  5. Swap entre deux colonnes pour 2 enregistrements
    Par Erakis dans le forum SQL Procédural
    Réponses: 12
    Dernier message: 15/12/2005, 19h09

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