问题
Is there an equivalent of Python str.format
in PHP?
In Python:
"my {} {} cat".format("red", "fat")
All I see I can do in PHP natively is by naming the entries and using str_replace
:
str_replace(array('{attr1}', '{attr2}'), array('red', 'fat'), 'my {attr1} {attr2} cat')
Is there any other PHP's native alternatives?
回答1:
sprintf is the closest thing. It's the old-style Python string formatting:
sprintf("my %s %s cat", "red", "fat")
回答2:
As PHP doesn't really have a proper alternative to str.format
in Python, I decided to implement my very simple own which as most of the basic functionnalitites of the Python's one.
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'));
- The order doesn't matter,
- You can omit the name/number if you want it to simply increment (the first
{}
matched will be transformed into{0}
, etc), - You can name your parameters,
- You can mix the three other points.
来源:https://stackoverflow.com/questions/16632067/php-equivalent-of-pythons-str-format-method