Май13
Качественная
стяжка пола разными способами и материалами.
Век живи — век учись (народная мудрость)
При внимательном чтении документации PHP, функции sprintf наткнулся на то, что доступ к одинаковым параметрам можно получить через указания номера параметра этой ф-ции.
Рассмотрим несколько примеров.
Во всех примерах я хочу вывести строку Мой персональный блог <a href=»http://blog.nagaychenko.com»>http://blog.nagaychenko.com</a>
Пример 1:
$string = 'Мой персональный блог <a href="%s">%s</a>';
echo sprintf($string, 'http://'.$_SERVER['HTTP_HOST'].'/blog');
Получаем ответ
Warning: sprintf(): Too few arguments in D:\www\test\index.php on line 3
Как видно я хочу заменить ключи %s на ‘http://’.$_SERVER[‘HTTP_HOST’].’/blog’ в двух местах, но в ф-ции значение для второго ключа не передано, следовательно произошла ошибка.
Пример 2:
$string = 'Мой персональный блог <a href="%s">%s</a>';
echo sprintf($string, 'http://'.$_SERVER['HTTP_HOST'].'/blog', 'http://'.$_SERVER['HTTP_HOST'].'/blog');
Получаем ответ
Мой персональный блог <a href="http://blog.nagaychenko.com">http://blog.nagaychenko.com</a>
В этом примере все прошло корректно, но мне дважды пришлось писать одно и тоже значение ‘http://’.$_SERVER[‘HTTP_HOST’].’/blog’, а если таких значений куда больше чем 2? Получается не очень красиво и можно сильно попасть при смене строки с ключами. Особенно попадаем если ключи поменялись местами. Чтобы такого не было, можно использовать третий пример.
Пример 3:
$string = 'Мой персональный блог <a href="%1$s">%1$s</a>';
echo sprintf($string, 'http://'.$_SERVER['HTTP_HOST'].'/blog');
Получаем ответ
Мой персональный блог <a href="http://blog.nagaychenko.com">http://blog.nagaychenko.com</a>
Обратите внимание на %1$s и %1$s — это теже ключи, что и %s, но в них теперь указывает порядковый номер параметра переданный в ф-цию.
Еще одно замечание, если юзаете двойные кавычки, то перед знаком доллара необходимо ставить экранирующий слешь «%1\$s».
Как видно 2-й и 3-й вариант более правильный, но лучше использовать вариант номер 3!
Ниже приведено описание ф-ции из мануала:
Описание
string sprintf ( string $format [, mixed $args ] )
Возвращает строку, созданную с использованием строки формата format .
Строка формата состоит из директив: обычных символов (за исключением %), которые копируются в результирующую строку, и описатели преобразований, каждый из которых заменяется на один из параметров. Это относится также к fprintf(), sprintf() и printf().
Каждый описатель преобразований состоит из знака процента (%), за которым следует один или более дополнительных элементов (в том порядке, в котором они здесь перечислены):
Необязательный описатель заполнения, который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или 0. По умолчанию используется пробел. Альтернативный символ может быть указан с помощью ‘. См. примеры ниже.
Необязательный описатель выравнивания, определяющий выравнивание влево или вправо. По умолчанию выравнивается вправо, — используется для выравнивания влево.
Необязательное число, описатель ширины, определяющий минимальное число символов, которое будет содержать результат этого преобразования.
Необязательный описатель точности, определяющий, сколько десятичных разрядов отображать для чисел с плавающей точкой. Имеет смысл только для числовых данных типа float. (Для форматирования чисел удобно также использовать функцию number_format().)
Описатель типа, определяющий, как трактовать тип данных аргумента. Допустимые типы:
% — символ процента. Аргумент не используется.
b — аргумент трактуется как целое и выводится в виде двоичного числа.
c — аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII.
d — аргумент трактуется как целое и выводится в виде десятичного числа со знаком.
e — аргумент трактуется как float и выводится в научной нотации (например 1.2e+2).
u — аргумент трактуется как целое и выводится в виде десятичного числа без знака.
f — аргумент трактуется как float и выводится в виде десятичного числа с плавающей точкой.
o — аргумент трактуется как целое и выводится в виде восьмеричного числа.
s — аргумент трактуется как строка.
x — аргумент трактуется как целое и выводится в виде шестнадцатиричного числа (в нижнем регистре букв).
X — аргумент трактуется как целое и выводится в виде шестнадцатиричного числа (в верхнем регистре букв).
Статья просмотренна 47147 раз, зашло посетителей 13082