una sprintf recorrer parte extraer eliminar ejemplo caracteres caracter cadena buscar php python string

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



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; }