pourquoi ce code ne fonctionne pas?preg_replace/e et tableau
$mx['foo'] = "vvv";
$string = "foo is foobar, baz is widgets";
echo preg_replace("/(foo)/ei", "$mx[('\\1')]", $string);
la sortie doit aimer ce
VVV est vvvbar, baz est des widgets
pourquoi ce code ne fonctionne pas?preg_replace/e et tableau
$mx['foo'] = "vvv";
$string = "foo is foobar, baz is widgets";
echo preg_replace("/(foo)/ei", "$mx[('\\1')]", $string);
la sortie doit aimer ce
VVV est vvvbar, baz est des widgets
Parce que vous utilisez des guillemets doubles dans preg_replace
, PHP tente d'utiliser votre valeur $mx
directement, qui produit alors une erreur. ..
échapper simplement le $mx
, et il fonctionnera:
echo preg_replace("/(foo)/ei", "\$mx[('\\1')]", $string);
Ou vous pouvez faire la même chose en utilisant des guillemets simples:
echo preg_replace("/(foo)/ei", '$mx[(\'\\1\')]', $string);
Votre preg_replace
utilise des guillemets doubles, qui sont interprétées par PHP. Il ne semble pas que vous ayez besoin d'une configuration aussi complexe, puisque c'est un simple remplacement de chaîne, pour autant que je puisse le voir. Une solution plus simple serait:
$string = str_replace('foo', 'vvv', $string);
Vous pouvez utiliser votre tableau aussi:
$replacements = array(
'foo' => 'vvv'
);
foreach ($replacements as $key => $replacement) {
$string = str_replace($key, $replacement, $string);
}
Cela remplacerait toutes les clés du tableau donné avec les valeurs associées.
Vous pouvez passer des tableaux de clés/remplacements à 'str_replace', alors vous n'avez pas besoin d'utiliser la boucle' foreach' – Laimoncijus
Mais cela impliquerait deux tableaux, non? Ce n'est pas très pratique ici, car les garder synchronisés est une chose supplémentaire à retenir. – jwueller
vous pouvez toujours avoir un seul tableau de remplacement associatif comme dans votre exemple, juste obtenir des clés/valeurs en conséquence: 'preg_replace (array_keys ($ remplacements), array_values ($ remplacements), $ string)' – Laimoncijus
Sa sortie ne serait-elle pas '' $ mx [('foo')] est $ mx [('foo')] barre, baz est widgets "' alors? – jwueller