Есть ли эквивалент Python str.format
в PHP?
В Python:
"my {} {} cat".format("red", "fat")
Все, что я вижу, что я могу сделать в PHP изначально, – это именовать записи и использовать str_replace
:
str_replace(array('{attr1}', '{attr2}'), array('red', 'fat'), 'my {attr1} {attr2} cat')
Есть ли другие альтернативы PHP?
sprintf
– самая близкая вещь. Это форматирование строки Python старого стиля:
sprintf("my %s %s cat", "red", "fat")
Поскольку у PHP действительно нет подходящей альтернативы str.format
в Python, я решил реализовать свою очень простую собственную, которая, как и большинство базовых функций, принадлежит Python.
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}
и т. Д.),