Имя PHP-спецификаторы в printf () строках

Есть ли способ в PHP назвать мои спецификаторы, как в Python?

Я хочу это в PHP:

$foo = array('name' => 24); printf("%(name)d", $foo); 

Я не мог найти ничего связанного с Google или в руководстве по php.

Хороший вопрос!

Вы можете работать самостоятельно без особых проблем, работая с регулярными выражениями. Я основывал реализацию на идее вызова vsprintf , которая ближе всего к заявленной цели среди встроенного семейства функций printf :

 function vsprintf_named($format, $args) { $names = preg_match_all('/%\((.*?)\)/', $format, $matches, PREG_SET_ORDER); $values = array(); foreach($matches as $match) { $values[] = $args[$match[1]]; } $format = preg_replace('/%\((.*?)\)/', '%', $format); return vsprintf($format, $values); } 

Тестировать:

 $foo = array('age' => 5, 'name' => 'john'); echo vsprintf_named("%(name)s is %(age)02d", $foo); 

Обновление: моя первоначальная реализация была очень счастливой. Оказывается, достаточно супер базового foreach , что также делает функцию полезной в PHP> = 4.1 (не на 100% уверенной в конкретной версии, но должна быть там).

Смотрите в действии .

Вы можете сделать это с помощью sprintf путем нумерации параметров, например:

 echo sprintf('hello, %2$s. What is your %1$s', 'age', 'Jesse'); 

Выводит следующую строку:

привет, Джесси. Сколько вам лет

Использовать strtr :

 $foo = array('%name%' => 24); strtr("%name%", $foo); // 24 

Вы также можете сделать это :

 "${foo['name']}" 

Или это:

 $name = 24; "$name" 

более близкой основной функцией является vsprintf() чтобы использовать массив вместо нескольких параметров, но вам все равно придется использовать нумерованные параметры.

в комментариях к этой функции docs есть кто-то, кто создал функцию, чтобы сделать то, что вы хотите vnsprintf () printf + array + named parameters