Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/12/2010, 19h34   #1
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
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 :
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 :
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.
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 20h21   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
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 :
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>';
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/12/2010, 20h57   #3
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
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 :
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
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 21h08   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Comme ça alors :
Code :
1
2
3
foreach($users as $id=>$nom) {
$contenuSelect .= '<option value="' . $id . ' ">' . $nom . '</option>' ."\r\n";
}
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 09/12/2010, 10h43   #5
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
Citation:
Envoyé par sabotage Voir le message
Comme ça alors :
Code :
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
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 14h12   #6
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
C'est encore moi
Donc voici ma fonction
Code :
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
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 14h19   #7
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

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

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

Code :
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 :
1
2
3
4
 
foreach($users as $user) {
                 $this->select .= '<option value="' . $user['id'] . ' ">' . $user['nom'] . '</option>' ."\r\n";
}
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/12/2010, 14h26   #8
Membre habitué
 
Avatar de Vicrabb
 
Femme Vinciane
Développeur Web
Inscription : novembre 2010
Messages : 66
Détails du profil
Informations personnelles :
Nom : Femme Vinciane
Âge : 29
Localisation : Belgique

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

Informations forums :
Inscription : novembre 2010
Messages : 66
Points : 100
Points : 100
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 :
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 :
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 :
1
2
3
4
5
 
        foreach($users as $user) {
            foreach($user as $id=>$nom){
                  $this->select .= '<option value="' . $id . ' ">' . $nom . '</option>' ."\r\n";
            }
__________________

Symfony par une débutante - Elgg - PHP

Je suis peut-être diplômée en archéologie mais je ne fouille pas le net pour décrypter le langage SMS, pour lire du code sans la balise du même nom..
"The cake is lie" - Doug Rattman, Portal
Vicrabb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/12/2010, 14h26   #9
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
dans ta configuration, ça serait :

Code php :
1
2
3
4
5
 
 
foreach($users as $id=>$nom) {
            $this->select .= '<option value="' . $nom['id'] . ' ">' . $nom['nom'] . '</option>' ."\r\n";
            }
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/12/2010, 14h28   #10
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

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

Code :
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
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 14h32   #11
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
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
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 16h05   #12
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
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
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 16h16   #13
Membre éprouvé
 
Avatar de radicaldreamer
 
Homme Guillaume
Développeur Web
Inscription : décembre 2007
Messages : 353
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 21
Localisation : France, Haut Rhin (Alsace)

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

Informations forums :
Inscription : décembre 2007
Messages : 353
Points : 473
Points : 473
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... ^^"
__________________
Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

- Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre
radicaldreamer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 16h37   #14
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
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
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 09h38   #15
Membre habitué
 
Avatar de Vicrabb
 
Femme Vinciane
Développeur Web
Inscription : novembre 2010
Messages : 66
Détails du profil
Informations personnelles :
Nom : Femme Vinciane
Âge : 29
Localisation : Belgique

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

Informations forums :
Inscription : novembre 2010
Messages : 66
Points : 100
Points : 100
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 :
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'];
  }
}
__________________

Symfony par une débutante - Elgg - PHP

Je suis peut-être diplômée en archéologie mais je ne fouille pas le net pour décrypter le langage SMS, pour lire du code sans la balise du même nom..
"The cake is lie" - Doug Rattman, Portal
Vicrabb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 17h04   #16
Nouveau Membre du Club
 
Christophe
Inscription : août 2009
Messages : 131
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : août 2009
Messages : 131
Points : 26
Points : 26
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 :
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.
iviewclear est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h49.


 
 
 
 
Partenaires

Hébergement Web