Verfügt PHP über ein Äquivalent zu dieser Art der Python-String-Ersetzung?
Frage
Python verfügt über diese wunderbare Möglichkeit, String-Ersetzungen mithilfe von Wörterbüchern zu handhaben:
>>> 'The %(site)s site %(adj)s because it %(adj)s' % {'site':'Stackoverflow', 'adj':'rocks'}
'The Stackoverflow site rocks because it rocks'
Ich liebe das, weil man einen Wert einmal im Wörterbuch angeben und ihn dann überall in der Zeichenfolge ersetzen kann.
Ich habe versucht, mit verschiedenen Funktionen zum Ersetzen von Zeichenfolgen in PHP etwas Ähnliches zu erreichen, aber alles, was ich mir ausgedacht habe, fühlt sich umständlich an.
Hat jemand eine schöne, saubere Möglichkeit, diese Art der String-Ersetzung in PHP durchzuführen?
Bearbeiten
Hier ist der Code von der Sprintf-Seite, der mir am besten gefallen hat.
<?php
function sprintf3($str, $vars, $char = '%')
{
$tmp = array();
foreach($vars as $k => $v)
{
$tmp[$char . $k . $char] = $v;
}
return str_replace(array_keys($tmp), array_values($tmp), $str);
}
echo sprintf3( 'The %site% site %adj% because it %adj%', array('site'=>'Stackoverflow', 'adj'=>'rocks'));
?>
Lösung
function subst($str, $dict){
return preg_replace(array_map(create_function('$a', 'return "/%\\($a\\)s/";'), array_keys($dict)), array_values($dict), $str);
}
Du nennst es so:
echo subst('The %(site)s site %(adj)s because it %(adj)s', array('site'=>'Stackoverflow', 'adj'=>'rocks'));
Andere Tipps
Ich weiß nicht, ob es schneller ist, aber Sie können es auch ohne reguläre Ausdrücke machen:
function subst($str, $dict)
{
foreach ($dict AS $key, $value)
{
$str = str_replace($key, $value, $str);
}
return $str;
}
Einige der vom Benutzer beigesteuerten Notizen und Funktionen in PHP-Dokumentation für Sprintf ganz nahe kommen.
Notiz:Durchsuchen Sie die Seite nach „sprintf2“.