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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] que faire pour réaliser un (foreach)

Re: que faire pour réaliser un (foreach)

par Fre3z69 » 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

Re: que faire pour réaliser un (foreach)

par moogli » 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.

@+

Re: que faire pour réaliser un (foreach)

par Zahnzao » 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 ;)

Re: que faire pour réaliser un (foreach)

par Fre3z69 » 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

Re: que faire pour réaliser un (foreach)

par sirakawa » 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);
?>

Re: que faire pour réaliser un (foreach)

par Zahnzao » 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];
}
;)

Re: que faire pour réaliser un (foreach)

par Fre3z69 » 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

Re: que faire pour réaliser un (foreach)

par Zahnzao » 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 ?

Re: que faire pour réaliser un (foreach)

par Fre3z69 » 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

Re: que faire pour réaliser un (foreach)

par xTG » 21 août 2012, 06:44

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

que faire pour réaliser un (foreach)

par Fre3z69 » 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