Eval et boucle

Résolu
cs_darkduck Messages postés 138 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 29 février 2008 - 16 nov. 2006 à 13:52
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 16 nov. 2006 à 17:16
Bonjour,

J'utilise la méthode suivante :

$affichage = 'je coute $prix euros';

for ($i=1; $i<5; $i++)
{
    $prix = $i;
   
    eval("\$affichage = "$affichage";");
    echo $affichage.'
';
}

Ce pendant ça m'affiche :
je coute 1 euros
je coute 1 euros
je coute 1 euros

je coute 1 euros

Et non pas :
je coute 1 euros

je coute 2 euros
je coute 3 euros

je coute 4 euros

On dirait que eval() garde en mémoire la première valeur de $prix.

Comment faire pour éviter ce problème?
Il y a-t-il une autre solution que d'utiliser eval() pour utiliser la valeur d'une variable, avant l'affection d'une valeur à cette variable (peut-être avec des pointeurs) ?

Merci d'avance

3 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
16 nov. 2006 à 14:04
hello,

dis donc, tu aimes te compliquer la vie ;-)
Par exemple :
<?php
$affichage = 'je coûte {__PRIX__} euros
';
for ($i = 1; $i < 6; $i ++) {
    echo str_replace ('{__PRIX__}', $i, $affichage);
}
echo '

';
$affichage = 'je coûte %s euros
';
for ($i = 1; $i < 6; $i ++) {
    printf ($affichage, $i);
}

echo '

';
function mapMe ($iVal) {
    return 'je coûte '.$iVal.' euros
';
}
$aPrix = range (1, 5);
$aAff = array_map ('mapMe', $aPrix);
foreach ($aAff as $sString) {
    echo $sString;
}

?>

et y en aurait plein d'autres :-)
3
cs_darkduck Messages postés 138 Date d'inscription vendredi 28 février 2003 Statut Membre Dernière intervention 29 février 2008 1
16 nov. 2006 à 14:31
Ben oui évidemment !!!

J'avais pas du tout penser à ces méthodes !!!

Merci beaucoup
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 nov. 2006 à 17:16
Salut,

au passage :

  eval("\$affichage = "$affichage";");

est à remplacer par :

  $$affichage = $affichage;

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
0
Rejoignez-nous