2010-07-13 2 views
1

Я нахожусь на фоне C и понимаю основы функции printf.printf function in PHP

я наткнулся на follwing код

<?php 
printf('%4$d %2$s code for %3$3.2f %1$s', "hours", "coders", 9, 99); 
?> 

, который печатает:

99 coders code for 9.00 hours 

Может кто-нибудь мне помочь в понимании вызов функции PRINTF.

+0

* (ссылка) * формат документально подтвержден на [sprintf] (http://de.php.net/manual/en/function.sprintf.php) – Gordon

ответ

4

<n>$ означает «использовать n-й аргумент, а не любую позицию, указанную в спецификациях форматирования».

4

Первый аргумент функции PRINTF является строка, которая получает измененную используя другие аргументы:

  • % 4d - занимает 4 позицию после запятой и воспринимает его как десятичное число
  • % 2 $ s - занимает 2 позицию после запятой и рассматривает его как строку
  • % 3 $ 3.2f - занимает 3 ITAM после запятой и рассматривает его как число с плавающей с двумя знаками после запятой
  • % 1 $ S - занимает первую позицию после запятой и рассматривает его как строку
1

ответ Игнасио является правильным.

Одно очень полезное применение этой функции, если вы используете gettext для I18N. Порядок замещения может меняться между одним языком и другим. (хотя, если вы обертываете материал в вызовы gettext, вы используете sprintf).

Я рисую пробел на примере реального мира, думаю, я не говорю о достаточном количестве естественных языков.

+1

«Мы собираемся [фильмы] в [пятница ] "против" Wir gehen [am Freitag] miteinander [ins Kino] ". – sarnold

0

Не уверен, что трудность заключается в том, потому что это достаточно хорошо документированы в руководстве:

Первый аргумент является маска формата, последующие аргументы значения для вставки в маску формата. Правила маскировки такие же, как в C. И, как и в C, вывод направляется непосредственно на стандартный вывод

1

Я думаю, что некоторые из путаницы может быть допущена ошибка в коде: %3$3.2f следует читать %3$.2f вместо (но это работает так или иначе).