Intereting Posts
Как автозагрузить класс с другим именем файла? PHP XMLReader & simpleXML Combo, с условиями Ошибка пространства имен Symfony2 DoctrineFixturesBundle Отправить файл через cURL из формы POST в PHP Другой вопрос, связанный с циклом php-массива Загрузка фотографий CodeIgniter Регулярное выражение для строки, которая должна содержать минимум 14 символов, где минимум 2 – числа, а минимум 6 – буквы Хранение значений $ _POST в массиве для сохранения их в текстовый файл PHP cURL, запись в файл Как заставить построитель запросов выводить свой необработанный SQL-запрос в виде строки? динамически создавать текстовые области с уникальными идентификаторами на основе входных данных флажка Facebook Войти с помощью HybridAuth, показывающий ошибку. Вы не можете получить доступ к этой странице напрямую Laravel 4.2 Сессионный стол не очищается yii cgridview ajaxlink работает только на первой странице JavaFX: Поместите секретный код и вычисления на серверной стороне

PHP-эквивалент метода `str.format` Python?

Есть ли эквивалент 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')); 
  1. Порядок не имеет значения,
  2. Вы можете опустить имя / номер, если хотите, чтобы он просто увеличивался (первый {} соответствовал, будет преобразован в {0} и т. Д.),
  3. Вы можете указать свои параметры,
  4. Вы можете смешать три другие точки.