[RESOLU] que faire pour réaliser un (foreach)

Eléphant du PHP | 418 Messages

21 août 2012, 02:49

Salutation,

Voici mon tableau:
$table = array('id' => array('1','2'),'name' => array('Je vend','j\'achete')); 
Je ne me souviens plus très bien comment agencer un foreach pour afficher que les "name" ou que les "id"

Pourriez vous svp me rafraichir la mémoire, afin que j'arrive à afficher un tableau qui seras contenu dans un <select>, dont les "id" seront les valeur des <option> et les "name" les valeur à afficher en clair dans le <select>.

J'ai besoin de cela pour ensuite afficher une liste en fonction du premier choix.

Merci de votre aide

En espérant que ma question est claire.

Cordialement

ViPHP
xTG
ViPHP | 7331 Messages

21 août 2012, 06:44

foreach($tableau[$indexQueTuSouhaites] as $value)
  echo $value;

Eléphant du PHP | 418 Messages

21 août 2012, 06:51

Merci, ça parait si évident maintenant ^^

Par contre, si je souhaite afficher dans un select les id et les name, comment tu ferais?

Cordialement

Eléphant du PHP | 190 Messages

21 août 2012, 09:24

Salut,
foreach ($tableau as $key => $value){
     
}

Tu sais qu'il y'a une doc php ?

Je trouve que ton tableau est mal agencé pour l'utilisation que tu veux en faire. Tu peux le modifier ou c'est trop tard ?

Eléphant du PHP | 418 Messages

21 août 2012, 09:55

ça ne fonctionne pas pour mon tableau, déjà essayer.

Code : Tout sélectionner

Notice: Array to string conversion in C:\wamp\www\annonces\index.php on line 119
119: <?= $v; ?>
Ensuite oui j'ai vu la doc, mais j'ai pas compris dans mon cas comment faire, donc je demande ici ^^.

En tout cas merci

Cordialement

Eléphant du PHP | 190 Messages

21 août 2012, 10:08

En fait l'idéal aurait été de faire un array simple ou la clé est l'id et la valeur est le nom.

Ainsi avec le script donné plus haut tu récupère $key et $value.

Mais bon si tu ne peux pas changer comme tu le souhaite on va faire autrement.

Si tu est bien certain qu'a chaque fois tu as le même nombre de valeurs dans ton $table['id'] et $table['name'] une boucle FOR ferait l'affaire
for($i=0;$i<count($table['id']);$i++){
   $id = $table['id'][$i];
   $name = $table['name'][$i];
}
;)

Mammouth du PHP | 2278 Messages

21 août 2012, 10:16

Eécute simplement ce code, et tu verras que la façon dont est conçu le tableau ne permet pas de faire le travail voulu avec un foreach.
<?php
$table = array('id' => array('1','2'),'name' => array('Je vend','j\'achete')); 
$boucle = 1;
foreach ($table as $ligne)
{
	print "<br /> passage $boucle<br />";
	print_r($ligne);
	$boucle ++;
}
?>
et médite là-dessus:
<?php
$table = array('id' => array('1','2'),'name' => array('Je vend','j\'achete')); 
$table = array_combine ($table['id'], $table['name']);
print_r($table);
?>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 418 Messages

21 août 2012, 10:25

Merci pour votre aide.

Je maitrise absolument pas le for, du fait que je ne l'utilise quasiment jamais, et que à chaque fois c'est pour une pagination ^^

En tout cas avec le for ça fonctionne.
<?php
for($i=0;$i<count($select['id']);$i++):
   $id = $select['id'][$i];
   $name = $select['name'][$i];
?>
			 				<option value="<?= $id ?>" <?= $region_id == $id ? ' selected' : ''; ?>>
			 					<?= $name; ?>
			 				</option>
<?php
endfor
?>
Merci beaucoup

Cordialement

Eléphant du PHP | 190 Messages

21 août 2012, 10:33

De rien

Dernier truc, stocke ton count() avant de faire ta boucle, c'est plus optimisé.
<?php
$count=count($select['id']);
for($i=0;$i<$count;$i++):
   $id = $select['id'][$i];
   $name = $select['name'][$i];
?>
        <option value="<?= $id ?>" <?= $region_id == $id ? ' selected' : ''; ?>>
           <?= $name; ?>
        </option>
<?php
endfor
?>
le count se fait à chaque itération donc en le stockant avant, il ne le fait qu'une fois ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 août 2012, 11:58

En tout cas avec le for ça fonctionne.
Si tu nous avait donné un exemple plus clair de ce que tu voulais ou t'aurais orienté vers quelque chose de plus précis.

ceci dit, je pense que tu n'a pas compris l'utilisation du foreach, et ce que'il te fournissait comme info.

Le but ici est de parcourir un tableau et d'afficher les infos provenant de DEUX tableaux différents ayant les même index.

Comme indiqué par xTG l'équivalent de ta boucle for avec un foreach est
<?php
$table = array('id' => array('1','2'),'name' => array('Je vend','j\'achete')); 
foreach($table['id'] as $key => $id){
    echo '<option value="',$id,'"';
    if ($region_id == $id) 
        echo ' selected="selected"';
    echo '>',$table['name'][$key],'</option>';
}
?>
comme indiqué avant ton tableau est pas super pratique, il serait plus intérréssant d'avoir id / name dans un même tableau (as tu regardé la solution de sirakawa avec array_combine ?).

et perso les <?= je trouve ça moche, tu peux très bien utiliser la syntaxe heredoc situ souhaite avoir une ligne plus claire que ce que j'ai fait au dessus.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 418 Messages

21 août 2012, 14:39

Oui j'ai regarder le array_combine, ça me fournit à peu près le même tableau.
Array ( [1] => Je vend [2] => j'achete ) 
Pour les <?= ?>, j'ai toujours fait dans certains cas des <?php echo''; ?>, mais vu que ça fait la même chose ^^
Le système HEREDOC, j'ai pas vraiment pris l'habitude de l'utiliser, bien que déjà appréhender, après c'est une histoire de gout.
Pour un plus gros projet, avec un cahier des charges précis, je pense utiliser HEREDOC, c'est plus clair, plus "simple" au niveau architecture, vu qu'en fait tu prned le html de la maquette, que tu implémente avec HEREDOC, mais c'est plus long et faut pas ce tromper ^^.

Pour l’exemple plus clair et précis, désolé, je savais pas comment présenter mon problème ^^

En tout cas merci à vous.

Cordialement