Question

Python a cette merveilleuse façon de gérer les substitutions de chaînes à l'aide de dictionnaires :

>>> 'The %(site)s site %(adj)s because it %(adj)s' % {'site':'Stackoverflow', 'adj':'rocks'}
'The Stackoverflow site rocks because it rocks'

J'adore cela car vous pouvez spécifier une valeur une fois dans le dictionnaire, puis la remplacer partout dans la chaîne.

J'ai essayé de réaliser quelque chose de similaire en PHP en utilisant diverses fonctions de remplacement de chaîne, mais tout ce que j'ai proposé semble gênant.

Quelqu'un a-t-il une manière propre et agréable de faire ce type de substitution de chaîne en PHP ?

Modifier
Voici le code de la page sprintf que j'ai préféré.

<?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'));
?>
Était-ce utile?

La solution

function subst($str, $dict){
    return preg_replace(array_map(create_function('$a', 'return "/%\\($a\\)s/";'), array_keys($dict)), array_values($dict), $str);
 }

Tu l'appelles ainsi :

echo subst('The %(site)s site %(adj)s because it %(adj)s', array('site'=>'Stackoverflow', 'adj'=>'rocks'));

Autres conseils

@Marius

Je ne sais pas si c'est plus rapide, mais vous pouvez le faire sans expressions rationnelles :

function subst($str, $dict)
{
  foreach ($dict AS $key, $value)
  {
    $str = str_replace($key, $value, $str);
  }

  return $str;
}

Certaines des notes et fonctions fournies par les utilisateurs dans Documentation PHP pour sprintf s'approcher assez près.

Note:recherchez sur la page "sprintf2".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top