由于PHP并不真的要在Python str.format
正确的选择,我决定实现我最简单的自己这是大多数Python的一个基本functionnalitites的。
function format($msg, $vars)
{
$vars = (array)$vars;
$msg = preg_replace_callback('#\{\}#', function($r){
static $i = 0;
return '{'.($i++).'}';
}, $msg);
return str_replace(
array_map(function($k) {
return '{'.$k.'}';
}, array_keys($vars)),
array_values($vars),
$msg
);
}
# Samples:
# Hello foo and bar
echo format('Hello {} and {}.', array('foo', 'bar'));
# Hello Mom
echo format('Hello {}', 'Mom');
# Hello foo, bar and foo
echo format('Hello {}, {1} and {0}', array('foo', 'bar'));
# I'm not a fool nor a bar
echo format('I\'m not a {foo} nor a {}', array('foo' => 'fool', 'bar'));
- 的顺序并不重要,
- 如果你希望它是简单的增加(相匹配的第一
{}
将转变为{0}
,等等)可以省略姓名/号码,
- 你可以命名你的参数,
- 你可以混合其他三个点。
您是否在寻找这个http://php.net/manual/en/function.sprintf.php –
** seealso:**:https://stackoverflow.com/questions/5701985/vsprintf-or -sprintf -with-named-arguments – dreftymac