Imp Posté 13 Novembre 2007 Partager Posté 13 Novembre 2007 Bonjour ! Soit les variables suivantes : $titre="hello {5}";$d[5]="world"; je voudrais remplacer le "{n}" (ici n=5) par "$d[n]" en utilisant preg_replace ou ereg_replace... mais sans succès Avec echo preg_replace("/{([0-9]+)}/", $d[$1], $titre); ou echo preg_replace("/{([0-9]+)}/", $d[\\1], $titre); j'aimerais bien obtenir mon "hello world" :-( ! Est-ce qu'il y aurait un truc ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Imp Posté 14 Novembre 2007 Auteur Partager Posté 14 Novembre 2007 voici un autre exemple, sans preg_replace Avec le code suivant ; $d[2]="salut";$n="2";echo $d[$n]; ça fonctionne parfaitement. J'obtiens bien "salut" en revanche celui-ci ne fonctionne pas du tout : $d[2]="salut";function essai($n) { return $d[$n]; }echo essai(2); rien du tout... Bizarre ou logique ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 14 Novembre 2007 Partager Posté 14 Novembre 2007 Logique parce ta variable $d n'est pas déclarée comme globale. Donc le $d de ta fonction n'a aucun rapport avec le $d de ton script. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Imp Posté 14 Novembre 2007 Auteur Partager Posté 14 Novembre 2007 (modifié) Merci pour l'explication Dan. Sinon j'ai trouvé une solution (un peu par hasard...) pour mon premier exemple. Ça va bien en utilisant le modificateur "e" Donc ceci fonctionne : $titre="hello {5}";$d[5]="world";echo preg_replace('/{([0-9]+)}/e', '$d[\\1]', $titre); De même en remplaçant le \\1 par $1, ça marche aussi. En revanche si j'enlève les simple quotes ou que je mets à la place de double quotes, ça ne va plus. Ça me laisse un peu perplexe. Infos sur le modificateur "e" : Avec cette option, preg_replace effectue la substitution normale des références arrières dans la chaîne de remplacement, puis l'évalue comme un code PHP, et utilise le résultat pour remplacer la chaîne de recherche.Les simples et doubles quotes sont échappées avec des anti-slashes ( \ ) dans les références arrières substituées. Seule preg_replace utilise cette option. Elle est ignorée par les autres. http://www.manuelphp.com/php/reference.pcr...n.modifiers.php Modifié 14 Novembre 2007 par Imp Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant