Imp Posté 13 Novembre 2007 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 ?
Imp Posté 14 Novembre 2007 Auteur 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 ?
Dan Posté 14 Novembre 2007 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.
Imp Posté 14 Novembre 2007 Auteur 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
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant