Page 1 sur 1

Encore un problème avec foreach

Posté : 18 avr. 2007, 15:51
par dogmongo
Bonjour tout le monde, je règle à peine un souci foreach que j'en trouve un autre

je récupère des données d'une base mysql
$list= $row['essai'];

les données récupérés resemble à un array

Code : Tout sélectionner

'option1'=>4, 'option2'=>5
puis je voudrais les utiliser sur un foreach
<?php

$arr = array($list);

reset($arr);

foreach ($arr as $key => $value) { 
   
echo "$key vaut $value<br />\n"
;
}

?>
le problème c'est que au lieu de me donner

Code : Tout sélectionner

option1 vaut 4 option2 vaut 5
il me donne le texte complet

Code : Tout sélectionner

0 vaut 'option1'=>4, 'option2'=>5
j'en conclus que les données sont pris en asci et je voudrais qu'il me les prenne en php

Auriez vous une idée génial ?

mille merci d'avance en espérent votre aide

Posté : 18 avr. 2007, 16:30
par Hubert Roksor
J'ai pas tout compris :-s

Fais un var_dump() de $arr pour voir ce qu'il y a dedans, ce serait un bon début.

À part ça, reset() ne sert à rien pour foreach (en fait foreach fait déjà un reset avant de démarrer).

Posté : 18 avr. 2007, 16:33
par dogmongo
je viens d'essayé merci

mais il me balance la même chose quand même

Posté : 18 avr. 2007, 16:53
par Hubert Roksor
...et que te renvoit le var_dump() ?

Posté : 18 avr. 2007, 16:58
par dogmongo
j'ai ca

Code : Tout sélectionner

array(1) { [0]=> string(25) "'option1'=>5,'option2'=>4" }
:?:

Posté : 18 avr. 2007, 17:15
par Hubert Roksor
Ben voilà, ton tableau possède exactement 1 élément, qui se trouve être une chaîne de 25 caractères:

Code : Tout sélectionner

'option1'=>5,'option2'=>4
J'imagine que ce n'est pas trop ce que tu cherches à faire donc le problème doit se situer dans le code qui créer le tableau.

Au fait, n'oublie pas les balises

Code : Tout sélectionner

quand tu postes du code (non-PHP) sur le forum. Pareil pendant que tu débugges, si tu vois le résultat à travers ton navigateur il est impératif de placer le var_dump() entre des balises <pre>

Posté : 18 avr. 2007, 17:16
par titerm
Tu as donc un resultat conforme au contenu de ta variable.

Le problème se situe donc soit dans la requete, soit dans les données que tu a insérés dans ta base

Posté : 18 avr. 2007, 17:24
par dogmongo
merci pour l'info,

pourtant je comprend pas, j'ai utilisé le même résultat avec un explode et j'ai réussi à les séparer et les utiliser , mais je n'aime pas trop utliser cette méthode :cry: ca ne conviens pas à ce que je veux faire , je suis obligé de les replacer en tableau et ca m'en fait un vagon or en foreach il aurai été bien plus facile à traité dès leur sortis.

Sinon:pour le resultat il est conforme à ce que j'ai mis dans la base mais c'est pour le réutilisé que ca va pas, il me le prend une chaîne de caractère mais c'est pas mon bute


merci quand même

Posté : 18 avr. 2007, 17:59
par titerm
Le plus simple dans ton cas c'est peut etre de serializer ton tableau avant de mettre en base, puis de déserializer lors de la lecture, de cette facon, tu pourra faire un foreach.

Posté : 25 avr. 2007, 13:18
par dogmongo
j'ai résolut , j'ai finalement utilisé un explode dans mon foreach et ca marche du tonner, j'ai juste mal placé ma boucle.
economie 1 requete à la place de 5 et plus !
merci tout le monde

Posté : 25 avr. 2007, 13:52
par Hubert Roksor
Le bon réflexe serait de montrer le code qui ne marchait pas ainsi que le code corrigé, histoire que ça serve à quelqu'un.

Posté : 26 avr. 2007, 01:16
par dogmongo
Tu as tout a fais raison je vais donc commenter et expliquer

Pour commencer j'explique le pourquoi du comment.
ce post est en fait le meme code les 2 problème sont cumulable c'est pourquoi j'en suit venu au résultat si desous

http://www.phpfrance.com/forums/voir_sujet-28982.php

J'ai créé une table avec des champs (nom, mode, cat).

Je voulais créer 5 tableaux pour les 5 catégories possible dans ma table, enfantin mais en 5 requetes , ca pas possible ca ne me plaisait pas,
chaque tableau devait me créer des liens vers une fiche produit,
les liens devaient passer en variable le nom, le mode, et la traduction

le problème était que dans mon foreach la dernière valeur mode restait la même pour tout mes liens, ça qui n'était pas le cas donc j'explique plus bas ce que j'ai fais

déclaration de la variable langue qui va ce trouver en fin de lien
$_GET['L']=$L; 
je fais ma requete
$q = "SELECT * FROM produits WHERE ok=\"1\" ";
$q.= " ORDER BY cat ASC";
$mr = execute_requete($q);

récupération du résultat que je place dans un array
j'ai simplifié je ne met pas que j'ai traduit mon array
$array[$r['cat']][] = "$r[nom]|$r[mode]|$r[nom]";
ensuite en sortie de traitemant du foreach j' ai regroupe mes champs (nom,mode)
c'est gagner j'ai réaliser 5 tableaux en une requete
foreach($array as $_GET['cat'] => $_GET['lien'])
ma variable $_GET['lien'] regroupe en faite mes 2 champs les plus
important dont un que je ne pouvais pas utiliser puisque il prennais la
dernière valeur lu de ma requete mysql, et mon soucis était que je ne parvenais pas les traiters j'avais trop de champs pour mes multi foreach

Maintenant que mes tableau sont créer à l'interieur de chacun d'eux je génère mes liens !
Donc dans mon 2 eme foreach j'ai déoupé ma variable avec un explode
et j'ai générer les lien pour chaque tableau
foreach($_GET['lien'] as $_GET['lien'] ){
//et voilà l'endroit ou j'aurai du le placer mon fameux explode
$tab = explode("|", $_GET['lien']);
ce qui me donne un lien correct qui me prend bien le nom de deux facon
<a href="<?php echo $tab[1]?>.php?id=<?php echo $tab[2]?>&L=<?php echo $_GET['L']?>"> 
<span class="textewhite"><?php echo $tab[0]?></span></a><br>