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'));
?>
War es hilfreich?

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

@Marius

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“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top