sprintf - ¿PHP tiene un equivalente a este tipo de sustitución de cadenas de Python?
sprintf php ejemplo (3)
Python tiene esta maravillosa forma de manejar las sustituciones de cadenas usando diccionarios:
>>> ''The %(site)s site %(adj)s because it %(adj)s'' % {''site'':''Stackoverflow'', ''adj'':''rocks''}
''The Stackoverflow site rocks because it rocks''
Me encanta porque puedes especificar un valor una vez en el diccionario y luego reemplazarlo por el lugar en la cadena.
Intenté lograr algo similar en PHP utilizando varias funciones de reemplazo de cadenas, pero todo lo que he encontrado me parece incómodo.
¿Alguien tiene una buena manera de hacer este tipo de sustitución de cadenas en PHP?
Editar
Aquí está el código de la página sprintf que más me gustó.
<?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''));
?>
Algunas de las notas y funciones aportadas por el usuario en la documentación de PHP para sprintf se acercan bastante.
Nota: busque en la página "sprintf2".
function subst($str, $dict){
return preg_replace(array_map(create_function(''$a'', ''return "/%//($a//)s/";''), array_keys($dict)), array_values($dict), $str);
}
Usted lo llama así:
echo subst(''The %(site)s site %(adj)s because it %(adj)s'', array(''site''=>'''', ''adj''=>''rocks''));
@ Marius
No sé si es más rápido, pero puedes hacerlo sin expresiones regulares:
function subst($str, $dict)
{
foreach ($dict AS $key, $value)
{
$str = str_replace($key, $value, $str);
}
return $str;
}