Aller au contenu

Substitution et variables


Sujets conseillés

Posté

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 ?

Posté

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 ?

Posté

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.

Posté (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é par Imp

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...