Version complète: sur le forum Webmaster Hub : Substitution et variables
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
Imp
Bonjour !

Soit les variables suivantes :
CODE
$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
CODE
echo preg_replace("/{([0-9]+)}/", $d[$1], $titre);

ou
CODE
echo preg_replace("/{([0-9]+)}/", $d[\\1], $titre);

j'aimerais bien obtenir mon "hello world" :-( !

Est-ce qu'il y aurait un truc ?
Imp
voici un autre exemple, sans preg_replace

Avec le code suivant ;
CODE
$d[2]="salut";
$n="2";
echo $d[$n];

ça fonctionne parfaitement. J'obtiens bien "salut"

en revanche celui-ci ne fonctionne pas du tout :
CODE
$d[2]="salut";

function essai($n)
{
    return $d[$n];
}

echo essai(2);

rien du tout...

Bizarre ou logique ?
Dan
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
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 :
CODE
$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" :
CITATION
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
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.