logo search
Vvedenie_v_Veb_programmirovanien_2 / Vvedenie_v_Veb_programmirovanien_2

Функции форматных преобразований строк

Язык PHP поддерживает ряд функций вывода, использующих такой же синтаксис, как и их Си -эквиваленты.

string sprintf (string $format [, mixed args]) –

возвращает строку, созданную из аргументов в соответствии со строкой форматирования $format. Строка $format может включать в себя команды форматирования, предваренные символом %. Все остальные символы копируются в выходную строку. Каждый спецификатор формата соответствует одному параметру, указанному после параметра $format.

<? // Пример str7.php Использование sprintf()

$num=5;

$location="tree";

$format = "There are %d monkeys in the %s";

printf($format,$num,$location); // выведет: "There are 5 //monkeys in the tree".

//sprintf(): целые числа с заполнением нулями

$year=3;

$month=10;

$day=11;

$dat = sprintf(" %03d-%03d-%02d ", $year, $month, $day);

echo $dat;

//sprintf(): форматирование валюты

$money1 = 68.75;

$money2 = 54.35;

$money = $money1 + $money2;

echo $money;// will output "123.1";

$formatted = sprintf(" %01.2f", $money);

echo $formatted; //выдаст "123.10"

?>

Вывод:

There are 5 monkeys in the tree 003-010-11 123.1 123.10

Функция printf(string $format [, mixed args, ...]) делает то же самое, что и sprintf(), только результирующая строка не возвращается, а направляется в браузер пользователя.

В PHP существует еще несколько функций для выполнения форматных преобразований, среди них - sscanf() и fscanf(), которые часто применяются в Си.

mixed sscanf (string str, string format [, string var1]) - это input-аналог printf(). sscanf() читает из строки str и интерпретирует её в соответствии с форматом format. Любой пробел в строке формата совпадает с любым пробелом в строке ввода.

<? // str8.php Использование sscanf()

$serial = sscanf("SN/23501","SN/%s",&$ser);

// получение серийного номера и даты изготовления

echo $serial,"<br>";

$mandate = "January 01 2011";

list($month, $day, $year) = sscanf($mandate,"%s %d %d");

echo "Item $ser was manufactured on: $year-" .substr($month,0,3)."-$day\n";

// функция возвращает количество присвоенных значений.

?>

Вывод:

1

Item 23501 was manufactured on: 2011-Jan-1

Использование форматных функций в Веб – приложениях ограничено из-за низкой скорости: для разбора строк оказывается выгоднее привлечь регулярные выражения или функцию explode().

Функция array explode (string разделитель, string $str [, int n]) делит строку на элементы и возвращает эти элементы в виде массива. Разбиение $str происходит по разделителям, количество фрагментов может ограничиваться необязательным параметром n.

Ее двойник - функция string implode (string разделитель, array фрагменты) - объединяет массив в строку. Формирование массива из строки и строки из массива продемонстрировано в следующем примере:

<? // str9.php

$info = "Minsk | baseball | indians";

$user = explode("|", $info);

//$user[0]="Minsk";$user[1]="baseball";$user[2]="Indians";

print_r($user);

$cities=array("Colum","Youngstown","Cleveland","Cincinnati");

$city_string = implode("l", $cities);

//$city_string="Colum1Youngstown1Cleveland1Cincinnati";

echo "<br>",$city_string;

?>

Вывод:

Array ( [0] => Minsk [1] => baseball [2] => indians )

ColumlYoungstownlClevelandlCincinnati

Функция string strtok (string $arg1, string $token) – выполняет лексемизацию строки, в результате которой строка arg1делится на слова (лексемы/tokens), где каждое слово отделено символом из $token. В примере строка "This is an example string", лексемизируeтся на отдельные слова с применением пробела как разделителя.

<? // str10.php

$string = "This is\tan example\nstring";

/* Использовать символы tab и newline как лексемизирующие символы */

$tok = strtok($string," \n\t");

while ($tok) {

echo "Word=$tok<br>";

$tok = strtok(" \n\t");

}

?>

Вывод:

Word=This

Word=is

Word=an

Word=example

Word=string

В параметр token можно поместить несколько лексем.

void parse_str (string $str ) - Разбирает str так, как если бы она была строкой запроса, переданной через URL, и устанавливает переменные.

<? // Пример str11.php Использование parse_str()

$str = "first=value &second[]=this+works &second[]=another";

parse_str($str);

echo $first; /* печатает "value" */

echo $second[0]; /* печатает "this works" */

echo $second[1]; /* печатает "another" */

?>

Вывод:

value this works another

getHostByName(domain_name) - преобразует переданное имя домена в IP адрес в формате nnn.nnn.nnn.nnn.

getHostByAddr(ip_address) - Преобразует данный IP адрес в формате nnn.nnn.nnn.nnn в полное имя домена.

Пример. Определяем в какой стране живёт посетитель:

<? //Str12.php

$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);

$countrys=array( ru => Россия, ua => Украина, by => Беларусь );

$array=array_reverse(explode(".",$host));

if(!empty($countrys[$array[0]]))

echo "Ваша страна: ".$countrys[$array[0]];

else echo "Откуда Вы пришли - я не знаю :(";

$ip = gethostbyname('localhost');

echo "<br>",$ip;

?>

Вывод:

Откуда Вы пришли - я не знаю :(

127.0.0.1