На главную страницу
Форум txt.version   




Статья :: Функции работы с данными

Функции работы с данными

 

Переменные

Манипуляции с переменными

get_defined_vars

Получение перечисления всех доступных переменных

array get_defined_vars (void )

Возвращает многомерный ассоциативный массив, содержащий ВСЕ переменные, доступные сценарию.

См. также: get_defined_functions().

empty

Проверка, имеет ли переменная значение

int empty (mixed var)

Возвращает FALSE, если переменная имеет непустое или отличное от нуля значение. Иначе возвращает TRUE. Фактически функция проверяет, имеет ли переменная значение, которое может быть приравнено к 0, то есть: (var==0).

$var = 0. if (empty($var)) { // = TRUE echo '$var - либо О. либо не имеет значения; if (Msset($var)),{ // = FALSE echo '$var не имеет значения'; } }

Заметьте, что эту функцию бесполезно использовать с аргументом, отличным от переменной, например выражение empty (adds!ashes ($name)) бессмысленно, так как здесь проверяется значение, возвращаемое функцией. Единственное, что может выявить в данном варианте функция empty(), это имеет ли выражение значение, эквивалентное TRUE (не равное нулю), а это может быть проверено и без использования функции.

См. также: isset() и unset().

isset

Проверка существования переменной

int isset (mixed var)

Возвращает TRUE, если переменная, указанная аргументом var, существует.

Фактически функция проверяет, имеет ли переменная значение, идентичное null, то есть : (var=nuH). Отметьте различие между равенством и идентичностью.

Для уничтожения переменной используйте функцию unset().

$а = "test". echo isset ($a); // TRUE unset ($a); echo isset ($a). // FALSE

См. также: empty() и unset().

unset

Уничтожение переменной

int unset (mixed var [, mixed var [, ...]])

Уничтожает указанные переменные var и возвращает TRUE.

// Уничтожить одну переменную unset ($foo). // Уничтожить один элемент массива unset ($bar['quux']); // Уничтожить несколько переменных unset (Sfool. $foo2, $foo3):

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

function destroy_foo() { global $foo: unset(Sfoo); } $foo = 'AM'; destroy_foo(); echo $foo; // выдает: ААА function f(&$bar) { unset($bar), $bar = "blah"; } echo "$foo\n".// выдает- ААА f($foo). echo "$foo\n".// выдает: ААА

Для статических переменных ситуация аналогична: уничтожается не сама переменная, а ссылка на нее.

function foot) { static $a. : $а++. echo "$a\n": unset($a); } foot). '/ выдает- 1 foo(): // выдает 2 foo(): // выдает: З

Чтобы уничтожить глобальную переменную внутри функции с помощью unset (), обращайтесь к ней через массив SGLOBALS:

function foo() { unset($GLOBALS['bar']): } $bar = "something" . foo():

См. также: isset() и empty().

gettype

Получение типа переменной

string gettype (mixed var)

Возвращаемый в строке тип переменной var обозначается следующими значениями:

  • «boolean»;
  • «integer»;
  • «double»;
  • «string»;
  • «array»;
  • «object»;
  • «resource;
  • «unknown type».

См. также: settype().

settype

Явная установка типа переменной

int settype (string var, string type)

Устанавливает для переменной с именем var тип type. Возвращает TRUE при успехе; иначе FALSE.

Возможные значения типа, передаваемого в аргументе type:

  • «integer»;
  • «double»;
  • «string»;
  • «array»;
  • «object».

См. также: gettype().

intval

Получение целочисленного значения переменной в указанной системе счисления

int intval (mixed var [, int base])

Возвращает целочисленное значение аргумента var, используя указанное основание системы счисления base (ио умолчанию 10 — «десятичное»). Аргумент var может быть любым скалярным типом; передавать в качестве аргумента массивы или объекты не допускается. Если аргумент var - числовой, то преобразование не производится, для строк основание системы счисления указывает на ту систему счисления, в которой находится число в строке.

echo intval ("1234.995"): // выводит 1234 echo intval ("1234455"). // выводит 1234 echo intval ("1234.455" .8):// выводит 668 echo intval ("1234455" .2):// выводит 1

См. также: doublevaK), strval(), settype() и «Определение типа».

doubleval

Извлечение значения дробного числа из переменной

double doubleval (mixed var)

Возвращает дробное (double floating point) значение числа, извлеченного из аргумента var, который может иметь любой скалярный тип. Указывать в аргументе объект или массив нельзя.

$var = '122 34343The'; $double_value_of_var =- doubleval ($var); print $double_value_of_var. // prints 122.34343

См. также: intva(), strva(), settype().

strval

Получение строкового значения переменной

string strval (mixed var)

Возвращает строковое значение переменной var, которая может иметь любой скалярный тип. Не допускается передача в функцию объектов или массивов.

См. также: doubleval(), intva(), settype() и «Определение типа».

serialize

Генерация хранимого образа переменной

string serialize (mixed value)

Возвращает строку, содержащую байтовую репрезентацию содержимого указанной value переменной, для того чтобы это значение могло быть сохранено (например, в базе данных или файле), а впоследствии, возможно, восстановлено с помощью функции unserializeO.

Это полезно для сохранения или передачи значений РНР без потери их типа и структуры. Функция работает с типами: integer, double, string, array (также многомерными) и object (свойства объектов сохраняются, но методы — нет).

// В Ssession_data содержится многомерный массив с данными сессии // и информацией о текущем пользователе. Мы используем serialize() // для сохранения, при завершении сценария, запросов пользователя. $сопп - odbc_connect ("webdb". "php". "chicken"). Sstmt - odbc_prepare (Sconn, "UPDATE sessions SET data = ? WHERE id = ?") ; $sqldata = array(serialize($sessior_data). $PHP_AUTH_USER). if (!odbc_execute (Sstmt. Msqldata)) f Sstmt = odbc_prepare(Sconn. "INSERT INTO sessions (id. data) VALUES(?. 7)"); if (!odbc_execute(Sstmt. &$sqldata)) { /* однако. Ошибочка */ } }

Для «пытливых умов», которых все же интересует, в каком формате функция сохраняет данные, приводим следующий пример.

<?php $d = array (1. 2. array ("a", "b", "c")). echo senalize(Ja): ->> II выводит строку, j // a.3 (i O.l,l:i:l:i:2;1:2:a:3 {i 0:s:1:"a".i:l;s:l:"b";1:2:S:1:"c".}}

unserialize

Создание переменной из ее сохраненного образа

mixed unserialize (string str)

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

// Здесь используется unserialize() для загрузки данных сессии // из базы данных в массив $session_data Этот пример дополняет // соответствующий, приведенный в описании функции serialize() Sconn « odbc_connect ("webdb". "php". "chicken"). Sstmt = odbc_prepare ($conn. "SELECT data FROM sessions WHERE id = ?"); Ssqldata = array ($PHP_AUTH_USER); if (!odbc_execute (Sstmt. &$sqldata) || !odbc_fetch_into (Sstmt. &$tmp)) { // если execute or fetch fails, инициализируем пустой массив $session_data = arrayO: } else { // здесь мы должны иметь // сериализированные данные в массиве StmpLOJ. $session_data = unserialize ($tmp[0]). if (!is_array ($session_data)) { // где-то ошибка произошла, инициализируем пустой массив $session_data » array(); } }

print_r

Отображение информации о переменной и ее содержимом

void printer (mixed expression)

Функция отображает информацию о переменных и их значениях в доступном для чтения человеком варианте. Если указывается переменная, содержащая строку или числовое значение, распечатываются их значения. При указании массива распечатываются значения индексов и значений элементов (также и для вложенных массивов), как в примере ниже. Для объектов распечатываются имена и значения свойств, как для массивов.

Сравните функцию print_r() с функцией var_dump().

<?php $а = array (1. 2, array ("a", "b". "с")). print_r ($a); ?> // -- Сценарий напечатает - // Array // ( II [0] -> 1 // [1] => 2 // [2] => Array // ( // [0] => а // [1] => b // [2] => с // ) // )

Учтите, что функция будет выполняться бесконечно, если в указанном массиве или объекте имеются прямые или косвенные ссылки на себя. То же справедливо и для вложенных объектов и массивов. Например, это касается вызова print_r($GLOBALS), так как массив SGLOBALS является глобальной переменной и содержит ссылку на себя.

var_dump

Отображение структурированной информации о переменной

void var_dump (mixed expression)

Выдает структурированную информацию о выражении (переменной), включающую его тип и значение. Массивы обрабатываются рекурсивно для каждого значения.

Сравните функцию var_dump() с print_r().

<рге> <?php $а = array (1. 2, array ("a", "b". "с")); var_dump ($a); ?> </рге>

При запуске сценария будет выдано:

аггау(З) { Г0]=> int(l) int(2) [2]=> array(3) { \ stnng(l) "a" f\ [1]=> ',** string(l) "b" 1 / [2]-> / string(l) "c" } }

Логические функции определения типа переменной

is_scalar

Проверка, является ли переменная простой

bool is_scalar (mixed var)

Возвращает TRUE, если переменная var имеет скалярный тип (числа, строки, логические значения), но не комплексный (массивы или объекты).

is_null

Проверка, является ли переменная пустой

bool is_null (mixed var)

Возвращает TRUE, если переменная var не существует (или ей явно присвоено пустое значение null). Функция эквивалентна выражению: (var = null), а также is_set(var).

is_ numeric

Проверка, является ли переменная числовой

bool isjiumeric (mixed var)

Возвращает TRUE, есл и переменная var имеет численный тип (integer, double), или строковый с числовым значением.

is_bool

Проверка, является ли переменная логической

bool is_bool (mixed var)

Возвращает TRUE, если переменная var имеет тип логического значения (TRUE либо FALSE), иначе FALSE.

is_nt

Синоним функции isjong ()

booll is_int (mixed var)

Возвращает TRUE, если переменная var имеет целочисленный тип.

is_integer

Синоним функции isjong ()

bool is_integer (mixed var)

Возвращает TRUE, если переменная var имеет целочисленный тип.

is_long

Проверка, является ли переменная целочисленной

bool isjong (mixed var)

Возвращает TRUE, если переменная var имеет целочисленный тип (integer, long). Синонимы функции: is_int(), is_integer().

is_real

Синоним функции is_double()

bool is_real (mixed var)

is_float

Синоним функции is_double()

bool is_float (mixed var)

is_double

Проверка, является ли переменная дробной

bool is_double (mixed var)

Возвращает TRUE, если переменная var имеет тип double, иначе FALSE.

is_string

Проверка, является ли переменная строковой

bool is_string (mixed var)

Возвращает TRUE, если переменная var — это строка, иначе FALSE.

is_array

Проверка, является ли переменная массивом

bool is_array (mixed var)

Возвращает TRUE, если переменная var — это массив, иначе FALSE.

is_object

Проверка, является ли переменная объектом

bool is_object (mixed var)

Возвращает TRUE, если переменная var — это объект, иначе FALSE.

is_resource

Проверка, является ли переменная указателем на ресурс

bool is_resource (mixed var)

Возвращает TRUE, если переменная var указывает на ресурс, выделенный и возвращенный предназначенной для этого функцией.

Ресурсы — это объекты, подобные файлам или результатам запросов к базам данных, выделяемые и освобождаемые внутренними функциями РПР. Когда программе больше не требуется какой-либо ресурс, хорошей практикой программирования является его явное освобождение предназначенными для этого функциями. Но в большинстве случаев интерпретатор РНР самостоятельно, по мере необходимости освобождает ненужные ресурсы (обычно при завершении сценария). Попробуйте, например, разобраться, чем отличаются устойчивые подключения к серверам баз данных и временные.

get_resource_type

Определение типа дескриптора ресурса

string get_resource_type (resource $handle)

Возвращает строку, содержащую описание типа ресурса. Если в аргументе передается неверный указатель на ресурс, то возникает ошибка.

$с = mysql_connect(); echo get_resource_type($c) "\n": // prints: mysql link $fp = fopen("foo"."w"); echo get_resource_type($fp) "\n": // prints: file Sdoc = new_xmldoc("l 0"). echo get_resource_typef$doc->doc)."\n": // prints, domxml document

Массивы

См. также: is_array(), explode(), implode(0, split() и join().

Инициализация массива, добавление/извлечение элементов

array

Создание и инициализация массива

array array ([mixed ...])

Языковая конструкция, возвращающая созданный массив. Индексы в ассоциированных массивах и значения элементов разделяются оператором =>.

Пары Index => value разделяются запятыми, они определяют индекс и значение. Индекс может быть строковым или числовым (но в ассоциированных массивах ведет себя как строковый). Если индекс не указывается, подразумевается по умолчанию подставляемое числовое значение автоинкремента (начиная с 0). Если указываются два элемента с одинаковыми индексами, последний заменяет первый.

Пример 1.

Sfruits = array ( // создаем двухмерный ассоциативный массив "fruits" => array ("a"=>"orange". "b"=>"banana". "c"=>"apple"). // эквивалент записи: Sfruits ["fruits"]["a"]= "orange"; и т д. "numbers" => array (1. 2. 3. 4. 5. 6). // эквивалент записи: Sfruits ["numbers"][]= 1: и т.д. "holes"=> array ("first". 5 => "second", "third") ):

Пример 2.

Sarray = arrayt 1. 1. 1. 1. 2=>4. 19. 3=>13). print_r($array): // распечатать массив Вывод будет следующим: Array ( [0] -> 1 [1] -> 1 С2] => 4 [3] => 13 [4] => 19 )

Пример 3 — одномерный массив.

$firstquarter = arrayd => 'January'. 'February', 'March'); pnnt_r($firstquarter): Вывод будет следующим: Array ( [1] => 'January' [2] => 'February' [3] => 'March1 )

См. также list().

array_pad

Добавление в массив нескольких элементов

array array_pad (array input, int pad_size, mixed pad_value)

Возвращает копию массива, в который добавлены элементы со значением pad_value, так, что число элементов в результирующем массиве становится равным pad_size. Если pad_size > 0, элементы добавляются справа, если < 0, то — слева. Если значение pad_size меньше числа элементов в исходном массиве, никакого добавления не производится (возвращается исходный массив).

$input = array (12. 10. 4): Sresult = array_pad (Sinput, 5, 0), $ result is array (12. 10. 4. 0. 0) Sresult = array_pad (Sinput. -7. -1). $ result is array (-1. -1. -1. -1, 12. 10. 4) Sresult = array_pad (Sinput. 2. "noop"): $ Уупс - нечего добавить

range

Создание массива из диапазона целых чисел

array range (int low. irvt high)

Создает и возвращает массив, содержащий целые числа от наименьшего low до наибольшего high включительно.

$numbers = range (3.6): // теперь Snumbers = array (3. 4. 5 б)

array_pop

Получение и удаление последних элементов массива

mixed array_pop (array array)

$stack = array ("orange", "apple", "raspberry"): 
Sfruit = array_pop (Sstack); // и их осталось
 двое: "orange", "apple" 
// a Sfruit = "raspberry". 

См. также: array_push(), array_shift() и array_unshift().

array_ push

Добавление элементов в конец массива

int array_push (array array, mixed var [, mixed ...])

Возвращает новое число элементов в массиве.

Для одного элемента действие эквивалентно $array[] = $var;

$stack = array (1. 2); $n = array_push (Sstack. "WW". 3): // $n - 4; Sstack (1. 2. "WW". 3).

См. также: array_pop(), array_shift() и array_unshift().

array_shift

Получение и удаление первых элементов массива

mixed array_shift (array a)

Возвращает первый элемент массива и удаляет его, сдвигая все последующие элементы массива а на одну позицию вперед.

Sargs - array ("-v". "-f"). $opt = array_shift (Sargs); 7 теперь $args = array ("-f");. a $opt = '-v":

См. также: array_unshift(), array_push() и аггау_рор().

array_unshift

Добавление элементов в начало массива

int array_unshift (array агг, mixed var [, mixed ...])

Добавляет перечисленные элементы var в начало массива агг, при этом все последующие элементы агг сдвигаются на число добавленных. Возвращает новое число элементов в массиве.

$queue = array ("pi", "рЗ"). 
array_unshift ($queue. "o4". "p5", "рб"); // 
  возвратит 5 
//теперь $queue = ("p4", "p5". "рб". "pi", 
  и "рЗ"). 

См. также: array_shift(), array_push() и array_pop().

list

Занесение элементов массива в переменные

void "list(...);

Подобно функции arrayO, это языковая конструкция. Она назначает перечисленным переменным значения элементов массива. Первой указанной переменной назначается значение первого элемента массива, второй — второго и т. д.

<table>
<tr> 
<th>Employee name</th> <th>Salary</th> 
</tr> 
<?php 
$result - mysql ($conn. "SELECT
 id. name, salary FROM employees"): 
  while (list ($id. $name. Ssalary) - 
mysql_fetch_row (Sresult)) { print (" 
  <tr>\n". 
<td><a hr°f-\""'nfo.php''id=$id\">
$name</a></td>\n". 
  <td>$salary</td>\n". 
" </tr>\n"); } ?> 
</table> 

См. также: extract(), each() n array().

compact

Занесение набора переменных в массив

array compact (mixed varname [, mixed ...])

Создает массив из указанных переменных, имена которых указаны как аргументы varname, со значениями этих переменных. Число аргументов неопределенное. Аргументами могут быть строки или массивы строк. Если в аргументе указано имя несуществующей переменной, он пропускается. Действие функции противоположно функции extract(). .

$city = "Санкт-Петербург"; Sstate = "РФ"; Sevent - "Трехсотлетие". location_vars = array ("city", "state"); $result = compact ("event". "nothing_here". $locat.ion_vars); // теперь. Iresult -= array ("event" -> "Трехсотлетие". // "city" => "Санкт-Петербур!". "state" => 'РФ")

См. также extract().

extract

Экспорт элементов массива в переменные

void extract (array var_array [, int extractjtype [, string prefix]])

Эта функция экспортирует из ассоциативного массива var_array элементы, делая их глобальными переменными. Индекс элемента используется как имя переменной, а значение элемента — как значение переменной (глобальные переменные — это элементы «символьной таблицы» — массива глобальных переменных $GLOBALS[], и функция extract() копирует элементы массива var_array в массив $GLOBALS[]). Действие функции extract() противоположно compact().

В ходе выполнения функция проверяет элементы массива var_array на наличие коллизий — совпадений с уже существующими переменными. Параметр extract_type определяет, каким образом коллизии будут обрабатываться, и может принимать одно из следующих значений:

  • EXTRJ3VERWRITE — при коллизии перезаписывать существующую переменную (по умолчанию);
  • EXTR_SKIP — при коллизии НЕ перезаписывать существующую переменную;
  • EXTR_PREFIX_SAME — при коллизии добавлять к имени создаваемой переменной префикс prefix;
  • EXTR_PREFIX_ALL — добавлять к именам всех создаваемых переменных префикс prefix.

Заметьте, что аргумент prefix требуется только тогда, когда аргумент extract_type имеет значение EXTR_PREFIX_SAME или EXTR_PREFIX_ALL

Функция проверяет имя каждой создаваемой переменной на соответствие правилам для имен переменных, и если имя недопустимо, то переменная не создается.

Пример возможного совместного использования с функцией wddx_ deserialize():

<?php /* Предположим, что массив $var_array возвращен wddx deserialize() */ Ssize = "large": $var_array - ar^ay ("color" => "blue". "size" -> "medium". "shape" => "sphere"): extract ($var_array. EXTR_PREF1X_SAME. "wddx"): print "Scolor. $si?e. Sshape. $wddx_size\n": // выведет: blue, large, sphere, medium ?>

См. также compact().

Работа с одним массивом

count

Определение числа элементов в комплексной переменной

int count (mixed var)

Возвращает число элементов в массиве или объекте var. Если var -скалярная неременная, то возвращает 1, если такая переменная существует, или 0, если такой переменной нет.

Заметьте, что 0 возвращается и в случае, если переменная не существует, и в случае, когда указан массив, не содержащий элементов. Используйте isset() для проверки существования переменной.

$а[0] = 1; $а[1] - 3; $3^2] = 5 Sresult = count~($a); //возвратит 3 а[2] =1: // такой элемент уже существует $а[4] = "": // пустой элемент $а[6] = 5: $result = count ($a), //теперь возвратит 5

См. также: sizeof(), isset() и is_array().

sizeof

Число элементов массива

int sizeof (array array)

Возвращает число элементов массива аналогично функции count ().

array_count_values

Вычисление числа одинаковых значений массива

array array_count_values (array input)

Возвращает массив, имеющий в качестве индексов уникальные значения массива input, а в качестве значений — количество одинаковых элементов (значений) в массиве input (то есть частоту встречаемости).

$агтау = атау (1. "hello". I. "world", "hello"); array_count_values (Sarray): /7 возвращает array (1=>2. "hello"=> 2. "world"=>1

in_array

Проверка массива на наличие значения

bool in_array (mixed needle, array haystack)

Возвращает TRUE, если в массиве haystack содержится элемент со значением needle.

$os = array ("Mac". "NT". "Irix". "Liniu"); if (in_array ("Inx". $os)){ print "Inx имеется". }

array_unique

Удаление дублирующихся значений массива

array array_unique (array array)

Возвращает массив, из которого удалены дубликаты значений. Индексы сохраняются.

Sinput = array ("a" => "XX". "YY". "b" => "XX". "ZZ". "YY"): $г = array_unique (Sinput): // Теперь $г =("b" => "XX". "1" => "ZZ", "2" => "YY")

array values

Удаление ассоциативных индексов массива

array array_values (array input)

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

$array = array ("size" => "XL", "color" => "gold"): array_values (Sarray): // returns array ("XL", "gold") //Пример реализации функции array_values для РНРЗ function _array_values ($arr) { $t = array(); while (list($k. $v) = each ($arr)) { $t[] = $v; return $t; } }

array_keys

Получение в массиве индексов массива

array array_keys (array input [. mixed search_value])

Возвращает в массиве (все) индексы массива input. При указании необязательного аргумента search_value в массиве возвращаются только индексы элементов массива input, имеющих значение search_ value.

$array = array (0 => 100, "color" => "red". 15): array_keys ($array): // returns array (0. "color". 1) $array = array ("blue", "red", "green", "blue", "blue"): array_keys ($array. "blue"). // returns array (0. 3. 4)

Пример алгоритма реализации функции array_keys (для PHP 3):

function _array_keys ($arr. $term="") { $t = array(); while (list($k.$v) = each (Sarr)) { if (Sterm && $v != $term) continue: $t[] = $k: } return $t: }

См. также array_values().

array_flip

Обмен местами индексов и значений массива

array array_flip (array trans)

Возвращает массив, в котором индексы и значения взаимозаменены.

$trans=array(3.4.5); pnnt_r($trans): // Выводит Array ( [0]=>3. [1]=>4. [2]=>5 ) Strans = array_flip (Strans); pnnt_r($trans): // Выводит: Array ( [3]=>0, [4]=>1. [5]=>2 )

array_sum

Суммирование всех элементов массива

mixed array_sum (array input [, int num_req])

Возвращает сумму всех числовых значений элементов массива. Тип возвращаемого числа (integer пли float) будет зависеть от типа значений в массиве.

$а = аггау(2.4.6.8), ' echo "sum(a) = " array_sumC$a) "\n", // prints- sum(a) = 20 $b = array("a"=>1.2."b"=>2.3."c"=>3.4): echo "sum(b) = ",array_sum($b). "\n"; // prints sum(b) = 6.9

array_rand

Случайная выборка индексов массива

mixed array_rand (array input [, int num_req])

Возвращает в массиве случайным образом выбранные индексы (!) элементов массива input. Число этих элементов указывается аргументом num_req (по умолчанию 1). Если выбирается один элемент, то возвращается не массив, а значение.

srand ((double) microtime() 10000000); //инициализировать генератор случайных чисел Sinput = array ("Neo". "Morpheus". "Trinity". "Cypher". "Tank"): $rand_keys = array_rand (Sinput. 2); print $input[$rand_keys[0]]."\n". print $input[$rand_keys[l]]."\n":

Работа с несколькими массивами

array_diff

Определение исключительного пересечения массивов

array array_diff (array arrayl, array array2 [, array ...])

Возвращает массив, содержащий значения, имеющиеся только в массиве arrayl (и не имеющиеся в любых других). Индексы не сохраняются.

$arrayl = array ("a" => "green", "red", "blue"): $array2 = array ("b" => "green", "yellow", "red"); Sresult = arrayjJiff (Sarrayl. $array2); // Sresult = array ("blue"):

См. также array_intersect().

array_ intersect

Определение включительного пересечения массивов

array array_intersect (array arrayl, array array2 [, array ...])

Возвращает массив, содержащий значения массива arrayl, имеющиеся uo всех остальных массивах. Индексы не сохраняются.

Sarrayl = array ("a" => "green", "red", "blue"). Sarray2 = array ("b" => "green", "yellow", "red"): Sresult = array_intersect (Sarrayl. Sarray2). //Sresult = array ("a" -> "green", "red"):

См. также array_d1ff().

array_merge

Объединение массивов

array arrayjnerge (array arrayl, array arrayZ [, array ...])

Возвращает массив, содержащий все элементы перечисленных массивов. Элементы последующего массива добавляются к концу предыдущего. При наличии элементов с одинаковыми строковыми индексами последующий элемент перезаписывает предыдущий. Для массивов с числовыми индексами совпадающие индексы делаются уникальными и общее число элементов таким образом сохраняется.

Sarrayl = array ("color" => "red". 2. 4): $array2 = array ("a", "b". "color" => "green", shape" => "t". 4). Sail = arrayjnerge (Sarrayl. Sarray2). // Sail = arrayC'color" => "green". 2. 4. "a", "b". "shape" => "t". 4).

См. также array_merge_recursive().

array_merge_recursive

Объединение сложных массивов

array array_merge_recursive (array arrayl, array аггау2 [. array ...])

Функция сходна с arrayjnergeO с тем дополнением, что она работает с многомерными и древовидными массивами, а элементы с одинаковыми строковыми индексами превращаются в подмассивы (см. пример). Для числовых индексов поведение функции аналогично аггау_ merge().

$arl = array ("color" => array ( "favorite" => "red"). 5). $ar2 = array (10. "color" => array ("favorite" => "green", "blue")). Sresult = array_merge_recursive ($arl. $ar2). // Sresult = arrayC'color" => array ( // "favorite" => array ("red" "green"). // "blue"). 5. 10).

См. также array merge().

array_slice

Получение части массива

array array_slice (array array, int offset [, int length])

Возвращает массив, содержащий последовательность элементов массива array, начиная с элемента, имеющего позицию offset, в количестве length элементов.

Если offset > 0, то последовательность будет начинаться с элемента, имеющего позицию offset от начала массива, если < 0, то отчет производится от конца массива. Не забывайте, что первый элемент имеет нулевую позицию, а последний здесь (-1).

Если указывается length>0, то это число возвращаемых в массиве элементов; если length < 0, то это позиция последнего возвращаемого элемента в массиве array от его конца. Если length не указывается, то возвращаются элементы вплоть до конца массива array.

$input = array ("a", "b". "с", "о", "е"), // помните. $input[0]="a" $output = array_slice ($input. 2): // возвращает "c"."d". и "е" $output = array_slice (Sinput. 2. -1). // возвращает "c"."d" $output = array_slice (Sinput. -2. 1); // возвращает '^".предпоследний $output = array_s!1ce (Sinput. 0, 3); // возвращает "a"."b", и "с"

См. также array_splice().

array_splice

Удаление части массива или замена ее частью другого

array array_splice (array array, int offset [, int length [. array replacement]])

Удаляет последовательность элементов массива array путем замены их на элементы из массива repl acement, начиная с элемента массива array, имеющего позицию offset, в количестве length элементов. Воз-вращает массив удаленных элементов.

Если offset > 0, то последовательность будет начинаться с элемента, имеющего позицию offset от начала массива; если < 0, то отсчет производится от конца массива. Не забывайте, что первый элемент имеет нулевую позицию, а последний — (-1).

Если указывается length > 0, то это число удаляемых элементов массива array; если length<0, то это позиция последнего удаляемого элемента в массиве array от его конца. Если length не указывается, то удаляются элементы вплоть до конца массива array. Чтобы удалить все элементы массива array, начиная от позиции offset и вплоть до конца массива array, при указанном аргументе replacement используйте аргумент length, равный count($input).

Реально выяснилось, что при указании отрицательных аргументов offset, length функция работает неправильно.

Если указан массив replacement, то удаляемые элементы заменяются на элементы массива repl acement. Если offset и length такие, что удалять нечего, то элементы массива replacement вставляются в позицию, указанную аргументом offset. Если массив replacement состоит из одного элемента, его можно указать как простую переменную, не заключенную в структуру аггау(). Действие следующих функций эквивалентно:

array_push (Sinput, $x, Sy)

array_splice (Sinput, count (Sinput), 0, array ($x, Sy))

array pop (Sinput)

array_splice (Sinput, -1)

array shift (Sinput)

array _splice (Sinput, 0, 1)

array unshift (Sinput, $x, Sy)

array splice (Sinput, 0, 0, array ($x, $y))

$a[$x] = Sy

array splice (Sinput, $x, 1, Sy)

 $input = array ("Al". "B2". "C3", "D4"). 
array_splice (Sinput. 2); // $input 
= array ("Al". "B2") 
  //array_splice ($input. 1. -1); 
// $input = array ("Al". "D4")
array_splice ($input. 1. count($input), "XI"); 
// Sinput = array ("Al", "XI") //array_splice (Sinput 
  -1. 1. arrayC'Yl". "Y2")); 
// Sinput = array ("Al". "B2". 
// "C3". "Yl". "Y2") 

См. также array_slice().

Курсор массива

reset

Сброс курсора массива

mixed reset (array array)

Устанавливает внутренний курсор массива array на его начало и возвращает значение начального элемента.

См. также: current(), each(), next(J и prev().

end

Перемещение курсора массива в конец

mixed end (array array)

Перемещает внутренний курсор массива array на последний элемент и возвращает этот элемент (его значение).

См. также: current(), each(), end(), next() и reset().

next

Перемещение курсора массива вперед

mixed next (array arr)

Возвращает значение элемента массива arr, на которое указывает внутренний курсор массива (или FALSE, если элементов больше не осталось). В этом действие данной функции аналогично current(), но затем функция next() перемещает курсор массива на следующий элемент.

Если перемещение курсора вперед приводит к выходу за границы массива, возвращается значение FALSE. FALSE также возвращается, если встречается элемент с пустым значением, поэтому для правильной работы с массивами, содержащими пустые значения или значение индекса 0, используйте функцию each().

См. также: current(), end (), prev() и reset ().

prev

Перемещение курсора массива назад mixed prev (array array)

Возвращает значение элемента массива агг, на которое указывает внутренний курсор массива (или FALSE, если элементов больше не осталось). В этом действие данной функции аналогично currento, но затем функция prev() перемещает курсор массива на предыдущий элемент. В огличие от next(), prev() перемещает курсор не вперед, а назад.

Если перемещение курсора приводит к выходу за границы массива, возвращается значение FALSE. FALSE также возвращается, если встречается элемент с пустым значением, поэтому для правильной работы г массивами, содержащими пустые значения или значение индекса (), используйте функцию each().

См. также: currento, end(), next() и reset().

current

Определение текущего элемента массива

mixed current (array array)

Каждый массив имеет внутренний указатель на «текущий» элемент этого массива — курсор. Функция возвращает элемент, на который указывает курсор массива, не сдвигая курсор.

Если курсор оказался вне пределов массива, функция возвращает FALSE. Если массив не имеет элементов, функция также возвращает значение FALSE, что делает невозможным различить, пуст массив или уже достигнут конец массива. Для правильного перебора элементов массива используйте функцию each().

См. также: end(), next(), prev() и reset().

pos

Синоним функции currentf)

mixed pos (array array)

См. также: end(), next(), prev() и reset().

key

Получение индекса текущего элемента массива

mixed key (array array)

См. также: current ()и next ().

each

Получение текущего элемента массива array each (array array)

Возвращает в массиве пару «индекс и значение» текущего элемента массива (на который указывает внутренний курсор) и сдвигает курсор массива на следующий элемент. Возвращаемый массив имеет четыре элемента:

[0] => индекс [1] => 'значение' [key] => индекс [value] => 'значение'

Когда курсор достигает конца массива, функция each() возвращает значение FALSE.

Пример 1.

$foo = array ("bob", "fred". "jussi". "joum". "egon". "marliese"); $bar = each ($foo): // теперь Sba1- = ( 0=>0, l=>'bob'. key=>0. value=>'bob' )

Пример 2.

$foo = array ("Robert" => "Bob'. "Seppo" => "Sepi"): $bar = each ($foo); // теперь $bar = (0=>'Roberf . l-=>'Bob'. key=>'Robert1 .value => 'Bob')

Функция each() обычно используется в паре с list() для перебора элементов массива, например $HTTP_POST_VARS[]:

echo "Values submitted via POST method:<br>". reset ($HTTP_POSM/ARS). while (list ($key. $val) - each ($HTTP_POST_VARS)) { echo "$key =•> $val<br>"

См. также: key(), list(), current(), reset(), next() и prev().

array _walk

Применение функции к элементам массива

Int array_wa!k (array arr, string func, mixed userdata)

Применяет пользовательскую функцию func к каждому элементу массива arr. В пользовательскую функцию с именем func передаются три (два) аргумента: значение текущего элемента, его индекс и аргумент userdata, если он указан.

См. пример использования с функцией create_function().

Если func требует более трех (двух) аргументов, при каждом ее вызове будет выдаваться предупреждение. Чтобы блокировать выдачу этих предупреждений, ставьте знак «@» перед функцией аггау_ walkO или используйте функцию error_reporting().

Функция func будет получать значения и индексы массива arr «по значению», то есть не сможет вносить в него изменения; если это необходимо, передавайте аргумент агг «по ссылке», указав перед его именем «&», и тогда все изменения отразятся на массиве.

В РНР 4 необходимо явно вызвать функцию reset(), чтобы установить внутренний курсор массива на первый элемент.

$v = array ("d"=>"Al". "а"=>"В2". "b"=>"C3". "c"=>"D4"); function test_alter (&$iteml. $key. $prefix) { // по ссылке Siteml - "$prefix Siteml"; } function test_print ($item2. $key) { echo "$key. $item2<br>\n"; ) array_walk ($v. 'test_pnnt'). reset ($v). array_walk ($v. 'test_alter', '_t_'); reset (Sv): array_walk ($v. 'test_pnnt');

См. также: each ()и list().

Сортировка массива

array_reverse

Расстановка элементов массива в обратном порядке

array array_reverse (array a)

Возвращает массив с обратным порядком элементов. Для вложенных массивов порядок сохраняется.

Sinput = array ("php". 4.0. array ("green", "red")); Sresult = array_reverse (Sinput): // Sresult = array (array ("green", "red"). 4 0. "php").

shuffle

Перемешивание элементов массива

void shuffle (array array)

Перемешивает элементы массива в случайном порядке.

$numbers = range (1.20): srand ((double)microtime()*1000000); // инициализируем генератор shuffle (Snumbers); // случайных чисел while (list (. Snumber) = each (Snumbers)) { echo "Snumber "; }

См. также: arsort(), asort(), ksort(), rsort(), sort() и usort().

sort

Сортировка массива по возрастанию

void sort (array array [, int sort_flags])

Сортирует элементы массива (от меньшего к большему).

<?php Sfruits = array ("lemon", "orange", "banana", "apple"). sort ($fruits): reset (Sfruits): while (list ($key. $val) = each (Sfruits)) {. echo "fruits[".$key."] = " $val, } >>

В этом примере будет напечатано:

fruits[0] = apple frultstl] = banana fruits[2] = lemon fruits[3] = orange

Флаги типа сортировки — значения аргумента sort_flags:

  • SORT_REGULAR — сравнивать элементы «как есть»;
  • SORT_NUMERIC — сравнивать элементы как числа;
  • SORT_STRING — сравнивать элементы как строки.

См. также: arsort(), asort(), ksort(), natsort(), natcasesort(), rsort(), usort(), array_multisort() и uksort().

rsort

Сортировка массива по убыванию

void rsort (array array [, int sort_flags])

Сортирует элементы массива в обратном порядке (от большего к меньшему). Аргумент sort_flags указывает параметры сортировки — см. функцию sort().

Sfruits = array ("lemon", "orange", "banana", apple"): rsort (Sfruits): reset (Sfruits): while (list ($key. $val) = each (Sfruits)) { echo "$key -> $val\n". }

В этом примере элементы массива будут напечатаны в обратном порядке:

fruits[0] = orange fruits[l] = lemon fruits[2] = banana fru1ts[3] = apple

См. также: arsort(), asort(), ksort(), sort() и usort().

asort

Сортировка ассоциативного массива по возрастанию

void asort (array array [, int sort_flags])

Сортирует элементы массива агг с сохранением ассоциативных индексов. По умолчанию — в алфавитном порядке. Значения флагов сортировки (необязательный аргумент sort_flags) приведены в описании sort().

Sfruits = array ("d"=>"lemon". "a"=> "orange". "b"=>"banana". "c"=>"apple"). asort (Sfruits): eset (Sfruits): while (list ($key. $val) = each (Sfruits)) { echo "$key = $val\n". }

Напечатано будет (значения в алфавитном порядке, индексы сохранены):

fnuits[c] = apple fruits[b] = banana fruitstd] = lemon fruits[a] = orange

При тестировании на платформе Windows было проверено, что функция также правильно сортирует строки с символами кириллицы.

См. также: arsort(), rsort(), ksort() и sort()

arsort

Сортировка ассоциативного массива по убыванию

void arsort (array arr [, int sort_flags])

Сортирует элементы массива arr с сохранением ассоциативных индексов. По умолчанию в обратном алфавитном порядке. Значенияфлагов сортировки (необязательный аргумент sort_flags) приведены в описании sort().

Sfruits = array ("d"=>"lemon". "a"=>"orange". "b"=>"banana". "c"=>"apple"): arsort (Sfruits); reset (Sfruits). .vhile (list (Skey. $val) = each (Sfruits)) { echo "$key = Sval\n";

Напечатано будет (значения в обратном алфавитном порядке):

fruitsfa] = orange fruits[d] = lemon fruits[b] = banana fruits[c] = apple

При тестировании на платформе Windows было проверено, что функция также правильно сортирует строки с символами кириллицы.

См. также: asort(). rsort(), ksort() nsort().

ksort

Сортировка массива по возрастанию индексов

int ksort (array array [, int sort_flags])

Сортирует массив array по значениям индексов с сохранением индексных ассоциаций. Аргумент sort_f"lags указывает параметры сортировки — см. функцию sort ().

Sfruits = array ("d"=>"lem". "a"=>"ora". "b"=>"ban". "c"=>"app"); ksort (Sfruits); reset (Sfruits); while (list ($key. $val) = each (Sfruits)) { echo "$key -> $val\n": }

В этом примере будет напечатано:

 fruits[a] = ora fruits[b] = 
ban fruits[c] = app fruits[d] - lem

См. также: asort(), arsort(), sort(), natsort() и rsort().

krsort

Сортировка массива по убыванию индексов

int krsort (array array [, int sort_flags])

Сортирует массив array по значениям индексов в обратном порядке с сохранением индексных ассоциаций. Аргумент sort_flags указывает параметры сортировки — см. функцию sort()

$fruits = array ("d"=>"lem". "a"=>"o-a". "b"=>"ban" "c"=>"app"); krsort (Sfruitsj: eset (Sfrults): / hhile (list ($key. $val) - each (Sfruits)) { echo "$key -> Sval\n". } \

В этом примере будет напечатано:

fri/itstd]  lem frintsfcl = app fruitstb] 
j can fruits[a] = ora 

См. также: asort(), arsort(), ksort(), sort(), natsortion rsort().

natsort

«Естественная» сортировка массива

void natsort (array array)

Функция сортировки массива array в «естественном» для человека порядке. Пример различия между обычным порядком сортировки (используемом в функции sort()) и «естественным»:

Sarrayl = Sarray2 = array ("imgl2.png"."imgl0.png"."img2.png"."imgl.png"); sortdarrayl); echo "Стандартная сортировка: ": pnnt_r($a'rayl): natsort($array2). echo 'ЛпЕстественная сортировка: ": print_r($array2):

Будет напечатано:

Стандартная сортировка. 
Array ( [0] => imgl.png 
[1] => imglO.png 
[2] => imgl2.png 
[3] => irng2.png ) 
Естественная сортировка: 
Array ( 
[3] => imgl.png [2] => img2.png [1] 
> imglO png [0] => img!2   png )

Более подробную информацию можно получить на странице Мар-О типа Пула «Natural Order String Comparison» (http://www.linuxcare.com.au/projects/natsort/).

См. также: natcasesort(), strnatcmp() и strnatcasecmp().

natcasesort

«Естественная» сортировка массива, нечувствительная к регистру

void natcasesort (array array)

Функция сортировки массива array в «естественном» для человека порядке с игнорированием регистра. Аналог функции natsort(), см. пример различия между обычным порядком сортировки (используемом в функции sort()) и «естественным» в описании функции natsort().

Более подробную информацию можно получить на странице Мартина Пула «Natural Order String Comparison» (http://www.linuxcare. com.au/projects/natsort/).

См. также: sort(), natsort(), strnatcmp() и strnatcasecmp().

uasort

Пользовательская сортировка ассоциативного массива

void uasort (array arr, function cmp_function)

Сортирует массив arr с сохранением индексных ассоциаций, используя для сравнения значения элементов пользовательскую функцию, указанную аргументом cmp_function.

Посмотрите примеры в описаниях функций usort() и uksort().

См. также: usort(), uksort(), sort(), asort(), arsort(), ksort() и rsort().

uksort

Пользовательская сортировка массива по индексам

void uksort (array array, function cmp_function)

Сортирует массив arr по индексам с сохранением индексных ассоциации, используя для сравнения индексов элементов пользовательскую функцию, указанную аргументом cmp_function. В эту функцию передаются два сравниваемых индекса элементов, а она в свою очередь должна вернуть положительное или отрицательное число или 0.

function cmp ($a. $b) { if ($a == $b) return 0; return ($a > $b) ? -1 / 1; } $a = array (4 => "four". 3 => "three". 20 => "twenty". 10 => "ten"). uksort ($a. "cmp"). while (list ($key. $value) = each (Sa)) { echo "$key: $value\n". }

Напечатано будет:

20 twenty 10 ten 4: four 3: three 

См. также: usort(), uasort(), sort(), asort(), arsort(), ksort(), natsort() и rsort(),

usort

Пользовательская сортировка массива

void usort (array array, string cmp_function)

Сортирует массив агг с сохранением индексных ассоциаций, используя для сравнения значения элементов пользовательскую функцию, указанную аргументом cmp_function. В эту функцию передаются два сравниваемых значения элементов, а она в свою очередь должна вернуть положительное или отрицательное число или 0.

См. пример использования с функцией create_function().

 //Пример 1. 
function cmp ($a, $b) { 
if ($a == $b) return 0; 
return ($a > $b) ? -1 : 1; } 
$а = array (3. 2. 5. 6, 1). usort 
{$a. "cmp"): while (list ($key. Svalue) 
 each ($a)) 
{ echo "Skey: Jva1ue\n": } 

В этом примере будет напечатано:

0: 6 
1: 5 
2: 3 
3 :2 
4 :1
//Пример 2" многомерный массив 
function cmp ($а. $b) { 
return stranp($a["fruit"],$b["fruit"]); } 
$fruits[0]["fruit"] - 
"lemons"; $fruits[l]L"fruit"l 
  = "apoles": $fruits[2]["frun"] - "grapes": 
usort($Truits. "cmp"); 
while (list ($key, Svalue) 
= each (Sfruits)) { 
echo "\$fruits[$key]: "
 . $value["fruit"] . "\n": } 

При сортировке многомерных массивов $а и $b содержит ссылки иа первый индекс массива.

Напечатано будет:

fruits[0]. apples 
Sfruitsfl]: grapes Ifnnts!.?]: 
lemons: 

См. также: uasort(), uksort(), sort(), asort(), arsort(). ksort(), natsort() и rsort().

array_ multisort

Сортировка релятивных массивов

boo! array_mu1tisort (array arl [, mixed ol [, mixed rl ... [. array -..]]])

Сортирует многомерные массивы (один или более) с сохранением индексной ассоциации, возвращая TRUE при отсутствии ошибок.

Исходные массивы рассматриваются как столбцы таблицы, сортируемой построчно. Поэтому массивы должны иметь одинаковое число элементов, и взаимосвязь между ними, как в строках таблицы, сохраняется! Приоритетом сортировки пользуются первые массивы. Флаги сортиро.'жи могут указываться для каждого массива, и их действие распространяется только на тот массив, после которого они указаны.

Флаги определения порядка сортировки (аргументы ох):

  • SORT_ASC — сортировка в порядке возрастания (по умолчанию);
  • SORT_DESC - сортировка в порядке убывания.

Флаги типа сортировки (аргументы тх):

  • SORT_REGULAR — сравнивать элементы как есть (по умолчанию);
  • SORT_NUMERIC — сравнивать элементы как числа;
  • SORT_STRING — сравнивать элементы как строки.

// Пример 1 
$arl - array ("10". 100. 100. "а"). $аг2 = 
array (1. 3. "2". 1): arrayjnultisort
 ($arl. $ar2), 
//$arl = array ("10". "a". 100. 100) 
//$ar2 = array (1. 1. "2". 3) 

Элементы второго массива, соответствующие одинаковым элементам (100 и 100) первого массива, также отсортированы.

// Пример 2 
$ar = array (array ("10". 100. 100. "a"), array (1. 3. 
  "2". D): 
anrayjiultisort ($ar[0]. SORT_ASC. SORT_STRING. 
$ar[l]. SORT_NUMERIC. SORT_DESC); 
$ar[0] = ("10", 100, 100, "a") — сортируются как строки 
  по возрастанию, 
$аг[1] = (1, 3, "2", 1) — сортируются как числа по убыванию. 



Функции

get_defined functions

Получение перечисления всех доступных функций

array get_defined_functions(void)

Возвращает многомерный ассоциативный массив, содержащий имена всех функций, доступных сценарию.

См. также: get_defined_vars(), get_extension_funcs().

function_ exists

Проверка существования функции

bool function exists (string function name)

Возвращает TRUE, если функция с именем function_name была декларирована.

if ( function_exists( 'imap_open')) { echo "IMAP функции доступны.<br>\n" } else { echo "IMAP функции НЕ доступны <br>\n"-j }

Заметьте, что если имя функции декларировано, это еще не означа-/ ст, что ее можно использовать, и это зависит от конфигурации РНР.

См. также method_exists().

call_user_func

Косвенный вызов функции

mixed call_user_func (string functioiyiame [, mixed parameter [, mixed

Вызывает функцию с именем function_name, передавая ей все последующие аргументы.

function AAA ($t) { print "Аргумент - $t": } call_user_fur>c САДА'. "МОЙ аргумент");

create_function

Динамическое создание функции

string create_function (string args, string code)<$M2-36> Создает анонимную функцию и возвращает подобранное для нее имя. Обычно перечисление в строке args аргументов функции передается в одинарных кавычках в качестве ограничителей; и то же рекомендуется для кода тела функции, передаваемого в строке code. Это делается для того, чтобы предотвратить замену интерпретатором переменных на значения; в противном случае необходимо предварять указание переменных слешем: Uavar. Возвращаемые имена функций обычно имеют префикс lambda

Таким образом, можно создавать функции на основе информации, полученной во время исполнения.

Snewfunc = create_function('$a.Sb', 'return "ln($a) + ln($b) = " log($a * $b),'); echo "Новой анонимной функции присвоено имя: $newfunc\n"; echo $newfunc(2.M_E)."\n"; // Выводит следующее // Новой анонимной функции присвоено имя- alambda_l // ln(2) + ln(2.718281828459) = 1 6931471805599

Ниже приводится пример функции обработчика, создающей набор функций на основе информации, хранимой в переменных и массиве, а затем пакетно применяющей этот набор к паре аргументов.

function process($varl. $var2. $farr) { // функция обработчик for ($f=0: $f < count($farr); $f++) echo $farr[$f]($varl.$var2)."\n". } // создать набор математических функций $fl = 'if ($a >=0) {return "b*a".5 = ".$b*sqrt($a),}'. ' else {return FALSE:}'; $f2 = "return \"min(bx2+a. a~2+b) = \" min(\$a*\$a+\$b.\$b*\$b+\$a):"; $f3 = 'if ($a > 0 && $b != 0) {return "ln(a)/b = " log($a)/$b;}'. I else {return FALSE;}'. Sfarr = array( create_function('$x.$y', 'return "немного тригонометрии: ". (sin($x) + $x*cos($y)):'). create_function('$x.$y'. 'return "гипотенуза: ". sqrt($x*$x + $y*$y).'). create_function('$a.$b', $fl). create_function('$a.$b', $f2), create_function('$a.$b'. $f3) ): echo "\пИспользование первого набора матем. функций \n"; echo "parameters: 2.3445. M_PI\n"; process(2 3445. M_PI, Sfarr): // теперь создать набор строковых функций Sgarr = array( create_function ('$b.$a'.'if (strncmp($a.$b,3) == 0)' ' return "** \"$a\" и \"$b\"\n** Похоже строки одинаковы!' ' (после проверки первых трех символов)";'). create_function('$a.$b'.'; return "CRC: ".crc32($a).". ". crc32(b):'), create_function('$a.$b', '; return "sirmlar(a.b) = ". siimlar_text($a.$b,&$p) "($p*)":') ). echo "\пИспользование первого набора строковых функций \n": processC'OnbiT - это сын ошибок". "Опыт - это эксперимент". Sgarr);

После запуска сценария будет выведен следующий текст:

Использование первого набора матем. функций parameters: 2.3445. М_Р1 немного тригонометрии: - 1.6291725057799 гипотенуза 3.9199852871011 о*а'.5 = 4 8103313314525 min(b~2+a a'2+b) = 8.6382729035898 ln(a)/b = 0 27122299212594 Использование первого набора строковых функций ** "Опыт - это эксперимент" и "Опыт - это сын ошибок" ** Похоже строки одинаковы! (после проверки первых трех символов) CRC: -1865696101 . 1908338681 siimlar(a.b) = 13 (60.4651162/907*)

Но, пожалуй, наиболее полезное использование анонимных лямбда-функций — это их использование для создания функций обратного вызова, например при использовании совместно с array_walk() или usort().

//Пример 1. Использование anonymous функций, как callback функций $av = arrayC'the "."a "."that "."this "): array_walk($av. create_function('S$v.$k'.'$v = $v."thing".')): pnnt_r($av): // for PHP 3 use varjJump()// Выводит: // Array // ( // [0] => the thing // [1] => a thing // [2] => that thing // [3] => this thing // ) // массив строк отсортированный по числу символов в строке // от наиболее короткой до самой длинной $sv = arrayC'small","larger","a big string","It is a string thing"); print_r($sv); // Выводит: // Array // ( // [0] => small // [1] => larger // [2] => a big string // [3] => it is a string thing // ) // сортировать строки usort($sv. create_function ('$a.$b' . 'return strlen($b) - strlen($a): ' )): print_r($sv); // Выводит: // Array // { // [О] => it is a string thing // [1] => a big string // [2] => larger // [3] => small // )

func_get_arg

Получение аргумента функции

mixed func_get_arg (Int argjium)

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

Функция func_get_arg() выдаст предупреждение об ошибке при вызове вне определения функции. Также предупреждение будет выдано (а функция возвратит FALSE) при попытке узнать параметр, которого не существует в списке аргументов; для правильной работы функции прежде необходимо узнать общее количество параметров с помощью функции func_num_args().

<?php 
function foot) { 
Snumargs = func_num_args();
echo "Число аргументов $numargs
<br>\n": 
if (Snumargs >= 2) j 
echo "Второй аргумент: 
" func_get_arg (1) . "<br>\n": } } 
foo (1. 2. 3): ?> 

См. также: func_num_args() и func_get_args().

func_get_args

Получение аргументов функции в массиве

array func_get_args (void)

Возвращает в массиве список аргументов, с которым была вызвана текущая пользовательская функция. Функция выдаст предупреждение об ошибке при вызове вне определения функции.

<?рhр function тоо() { Jnumargs = func_num_args() ; echo "число аргументов: $numargs<br>\n". $arg_list = func_get_args(). for (Si = 0. $1 < Snumargs; $1+*) { echo "аргумент (номер $i): " . $arg list[$i] . "<br>\n"; } } foo (1. 2. 3); ?>

См. также: func_num_args() и func_get_arg().

func_num_args

Определение числа полученных аргументов

int func_num_args (void)

Возвращает число аргументов, переданных в текущую пользовательскую функцию. Функция выдаст предупреждение об ошибке при вызове вне определения функции.

Эта функция обычно используется совместно с функциями func_get_ arg() и func_get_args() в пользовательских функциях, принимающих неопределенное число параметров.

<?php function foo() { Snumargs = func_num_args(): echo "Число аргументов функции: $numargs\n": } foo (]. 2, 3). // Pnnts 'Number of arguments: 3' ?>

Объекты и классы

Описываемые в разделе функции позволяют получать информацию о классах и экземплярах объектов. Можно узнать, к какому классу принадлежит объект, его свойства и методы, а также их наследственную принадлежность.

В этом примере сначала определяется базовый класс, а затем его наследник.

<?php // Пример 1 Файл с определениями
 классов: classes. inc class ИсточникС
вета 
  { // базовый класс var $>правляемость; 
//неизменное логическое значение
 var
 $Яркость; 
// конструктор function ИсточникСвета
 ( $управляемость. $яркость="неяркий" 
) { 
$this->Управляемость = $управляемость; 
$this->flpKOCTb = $яркость: } 
function 15_управляемо() { 
return $1гп5->Улравляемость. } 
function whatjipKOCTbО { 
return $this->Яркость; } 
} // конец определения класса 
ИсточникСвета 
// Расширение базового класса 
class Лампочка extends Источник
Света { 
var $Включена = FALSE. 
// конструктор function Ла»мпочка() ( 
$this->ИсточникСвета( TRUE, 
"яркий" ): 
// Лампочка - это ИсточникСвета 
  (управляемый, "яркий") } 
function включить() { 
$this->Включена = TRUE. } 
function 15_вклочена () { 
return $this->Включена; } 
} // конец определения класса 
Лампочка ?>

Следующий сценарий создает экземпляры объектов на основе определенных классов, а затем выводит основную информацию, которую можно узнать о классах и объектах средствами РНР 4.

 <php // Пример 2 Файл test_scnpt.uhp
 include
 "classes.тс": // определения функций 
function print_vars($obj) ( 
$arr = get_object_vars($obj); 
while (list($prop. $val) = each($arr)) 
echo "\t - свойство '$ргор' =
 \"$val\"\n": i 
function pnnt_methods($cbj) 
{ $arr - get_class_methods(qet_class($obj)): 
foreach (Jarr as Smethod) 
echo "\t - метод: $rnethodition"; } 
function class_parentagp($obj. Sclass) 
{ global $$obj: if (is_subclass_of($$obj  
 Sclass)),
 { erho "\пОбьркт $obj принадлежит к
 классу: 
" get_class($$obj); echo " поцкпасса
 $class\n"; }
 else { echo "Объект $obj не принадлежит
к подклассу $class\n"; } i /
  конец определения функций 
еспо "Доступные сценарий
 '$PHP_SELF' классы\n": iclss 
- get_Jeclared_classesf 
  > forear.h ($c.isb as $cis name) 
echo "\t- *cls_namei)\n": 
// инициализируем 2 объекта 
$солние = new ИсточникСвета
СTRUE."очень яркий"); $эл_лампочка * 
  new Лампочка ()
// выясняем информацию об объектах 
echo "\пКЛАСС объекта 'солнце'. '
" get_class($coлнце) '"\n". 
  еспо "КЛАСС обьекта 'эл_лампочка' '
.get сlаss(эл_ ланлочка); echo 
"'. Родительский Класс '"
get parent сlass(эл_лампочка).°)\гГ; 
// проследить свойства объекта 
'солнце' echo 
"\n Свойства объекта 'солнце' 
  \п"; print \'аг5($солнце). 
// и свойства объекта 'эл_лампочка
echo "\n Методы объекта 
'эл_лампочка': \n":
pnnt_methocls(эл_лампочка): 
echo "\n Наследственность:\n": сlass
_раrentаgе
("эл_лампочка", "Лампочка"): сlаss
_раrentаgе
("эл_лампочка". "ИсточникСвета"): 

При запуске сценария в системе РНР 4.0.4 для Windows он выводит:

Доступные сценарию классы class. stdClass() class: OverloadedTestClass() class: Directory()class COMO class: ИсточникСвета() class: Лампочка()КЛАСС объекта 'солнце': 'ИсточникСвета' КЛАСС объекта 'эл_лампочка': 'Лампочка'. Родительский Класс (ИсточникСвета) Свойства обьекта 'солнце': - свойство 'Управляемость' = "1" - свойство 'Яркость' = "очень яркий" Методы объекта 'эл_лампочка': - метод ИсточникСвета() - метод. 13_управляемо() - метод: what_яpKocTb() - метод: Лампочка() - метод: включить() метод- 15_включена() Наследственность: Объект эл_лампочка не принадлежит к подклассу: Лампочка Объект 'эл_лампочка' принадлежит к классу: 'Лампочка', подкласса: 'ИсточникСвета'

get_ declared_classes

Получение списка доступных классов

array get_declared_classes (void)

Возвращает в массиве перечисление имен классов, декларированных для текущего сценария.

В РНР 4 в начале возвращаемого массива указываются имена трех дополнительных классов: stdClass (определен в Zend/zend.c), Over-loadedTestClass (определен в ext/standard/basic_functions.c) и Directory (определен в ext/standard/dir.c); для системы Windows доступен также класс Com.

class_ exists

Проверка существования класса

booll_ class_exists (string class_name)

Возвращает TRUE, если для класса classjiame имеется определение; иначе — FALSE.

get_class_methods

Получение списка методов класса

array get_class_methods (string class_name)

Возвращает в массиве перечисление методов класса с именем class_ name.

См. также: get_class_vars(), get_object_vars().

get_class_vars

Получение списка свойств класса

array get_class_vars (string class_name)

Возвращает в массиве перечисление свойств класса с именем class_ name.

См. также: get_classjnethods(), get_object_vars().

get _class

Получение класса объекта

string get_class (object obj)

Возвращает имя класса, к которому принадлежит объект obj.

См. также: get_parent_class(), is_subclass_of().

get_parent_class

Получение имени родительского класса объекта

string get_parent_c!ass (object obj)

Возвращает имя родительского класса для класса, которому принадлежит объект obj.

См. также: get_class(), is_subclass_of().

is_subclass_of

Проверка наследования класса

boot is_subclass_of (object obj, string superclass)

Возвращает TRUE, если объект obj принадлежит к классу, наследному от класса superclass, иначе возвращает FALSE.

См. также: get_class(), get_parent_class().

get_object_vars

Получение списка свойств объекта

array get_object_vars (object obj)

Возвращает в ассоциативном массиве инициализированные для объекта obj свойства. Если переменным класса, к которому принадлежит объект obj, не были присвоены значения, то такие переменные в возвращаемый массив не включаются.

<?php class Point2D { // точка на плоскости var $x. $у: var Slabel. //конструктор function Point2D($x. $y) { $this->x = $х; $this->y = $у. } function setl_abel($label) { $this->label = Slabel. } function getPointO { return arrayC'x" => $this->x. "y" => $this->y. "label" => $this->label); } } $pl = new Point2D(1.233. 3.445); pnnt_r(get_object_vars($pl)); // "Slabel" объявлена, но не инициализирована // Array // ( // [х] => 1.233 // [у] => 3 445 // ) $pl->setl_abel("point #1"); рп nt_r(get_object_vars( $pl)): // Array // ( // [х] => 1.233 // [у] => 3.445 // [label] => point #1 // ) ?>

См. также: get_classjnethods(), get_class_vars().

method_exists

Проверка наличия у объекта указанного метода

bool method_exists (object object, string method_name)

Возвращает TRUE, если объект obj имеет метод с именем methodjiame, в противном случае возвращает FALSE.

call_ user_ method

Косвенный вызов метода объекта

mixed calljjserjnethod (string method_name, object obj [, mixed parameter [, mixed ...]])

Вызывает метод method_name объекта obj. Возможные параметры методу можно передать в последующих аргументах parameter.

<?php class Country { // объявление класса var $NAME; var $TLD. function Country($name. $tld) { $this->NAME = $name; $this->TLD = Hid; } function pnnt_info($prestr="") { echo Sprestr "Country: ",$this->NAHE. "\n": echo Sprestr."Top Level Domain: ".$this->TLD."\n": } } // создаем экземпляр класса Sentry = new CountryC'PoccMfl". "ru"); echo "* Прямой вызов метода класса \n", Scntry->print_info(), echo "\n* Косвенный вызов того же метода класса \n": calljjserjnethod ("pnntjnfo". Sentry. "\t"): ?>

См. также call_user_func().

 

Математические функции

Эти математические функции предназначены только для работы с числовыми данными, которые имеет ваш компьютер. Если вам требуется дополнительная точность в расчетах, обратитесь к «математическим функциям повышенной точности BCMath».

Математические функции могут быть разделены на несколько групп: математические константы, алгебраические функции, функции генерации случайных чисел, тригонометрические функции, функции конвертации чисел.

Математические константы

Следующие значения определяются математическим модулем РНР как константы:

Константа

Значение

Описание

М_Р1

3.14 159265358979323846

Пи

М_Е

2.7182818284590452354

E

M_LOG2E

1. 4426950408889634074

log_2 e

M_LOG10E

0.43429448190325182765

log_10 e

M_LN2

0.693 1471 8055994530942

log_e 2

М LN10

2.30258509299404568402

log_e 10

М PI 2

1.57079632679489661923

Пи/2

М_Р1_4

078539816339744830962

Пи/4

М_1_Р1

0.31330988618379067154

1/Пи

М 2 PI

0.63661977236758134308

2/Пи

M_SQRTPI

1.77245385090551602729

Sqrc(nn)

M_2_SQRTPI

1.12837916709551257390

2/sqrt(nii)

M_SQRT2

1 .4 1 42 1356237309504880

Sqrt(2)

M_SQRT3

1.73205080756887729352

Sqrt(3)

M_SQRT1_2

0.70710678118654752440

l/sqrt(2)

M_LNPI

1.144729885849400174)4

log_e(IIn)

M_EULER

0.57721566490153286061

Константа Эйлера

Алгебра

abs

Получение абсолютного значения числа

mixed abs (mixed number)

Возвращает абсолютное значение аргумента number. Если аргумент имеет дробный тип, возвращается дробь; иначе целое.

$I=abs(-546). // $I=dnt) 546; $D=abs(123 456); // $D=(double) 123.456:

max

Получение наибольшего аргумента

mixed max (mixed argl, mixed arg2.....mixed argn)

Возвращает наибольший из аргументов. Число аргументов неограниченно. Если в качестве первого параметра передается массив, функция возвращает наибольшее значение из этого массива. Если аргумент не массив, то необходимо как минимум два аргумента, иначе выдается предупреждение. В случае, когда в аргументах передастся более одного массива, возвращается тот массив, который содержит наибольшее значение. Комбинировать в аргументах массивы и скалярные значения не рекомендуется. Возвращается значение с тем типом, который имеет наибольшую точность среди аргументов (double или integer), и этот же тип используется для сравнения аргументов.

min

Получение наименьшего аргумента

mixed min (mixed argl, mixed arg2, mixed argn)

Возвращает наименьший из аргументов. Функция действует подобно функции тах().

round

Округление дробного числа до целого

double round (double val [, int precision])

Округляет дробное число val до указанной аргументом precision точности (число десятичных знаков после занятой).

$foo = round (34). // $foo ==30 $foo = round (3.5); // $foo ==40 $foo = round (1.95583. 2): // $foo == 1.96

См. также: ceil ()и floor().

floor

Удаление дробной части числа

int floor (float number)

Возвращает целое значение аргумента number, у которого безусловно отбрасываются все цифры после запятой. Указывать в аргументе целые числа — бесполезная операция.

$foo = floor (I 95583): // $foo == 1

См. также: ceil ()и round().

ceil

Дополнение дробного числа до следующего целого

int ceil (float number)

Возвращает целое значение аргумента number, дополненного до следующего целого числа. Указывать в аргументе целые числа бессмысленно.

 $х = ceil(4.25): // $х=5 

См. также: floor() и round().

Pi

Получение значения числа Пи

double pi (void)

Возвращает значение числа Пи (3.1415926535898).

sqrt

Извлечение квадратного корня числа

float sqrt (float arg)

Возвращает квадратный корень из аргумента arg.

echo sqrt(90),// выведет 9.4868329805051

log

Вычисление натурального логарифма

float log (float arg)

Возвращает значение натурального логарифма аргумента arg.

echo log(2 7); // выведет 0.99325177301028

log 10

Вычисление десятичного логарифма

float logl() (float arg)

Возвращает значение десятичного логарифма аргумента arg.

echo loglO(lOOO). // выведет 3

ехр

Вычисление экспоненты

float exp (float arg)

Возвращает число с, возведенное в степень arg.

echo exp(l): //' выведет 2.71828)828459

См. также pow().

pow

Возведение числа в степень

float pow (float base, float exp)

Возвращает результат возведения основания base в степень ехр.

ecno pow(2.8).// выведет 256

См. также ехр().

Генерация случайных чисел

srand

Инициализация генератора случайных чисел

void srand (int seed)

Инициализирует генератор случайных чисел значением seed.

srand ((double) microtiroe() * 1000000): Srandval = rsnd():

См. также: rand(), getrandmax(), mt_rand(), mt_srand() и mt_getrandmax().

getrandmax

Получение максимального случайного числа int getrandmax (void)

Возвращает максимальное значение, которое может возвратить вызов функции генератора случайных чисел rand(). Обычно это 32 767.

См. также: rand(), srand(), mt_rand(), mt_srand() n mt_getrandmax().

rand

Генерация случайного числа

int rand ([int min [, int max]])

При вызове с необязательными параметрами rain, max, определяющими соответственно минимальное и максимальное значение, генерирует и возвращает целочисленное псевдослучайное значение, лежащее включительно в указанных пределах. Если аргументы не указываются, то используются значения по умолчанию: 0 и RAND MAX.

Не забывайте заранее инициализировать генератор случайных чисел функцией srand().

См. также: srand(), getrandmax(), mt_rand(), mt_srand() и rat_getrandmax().

mt_srand

Инициализация МТ-генератора случайных чисел

void mt_srand (int seed)

Инициализирует МТ-генератор случайных чисел значением seed.

mt_srand ((double) microtimeO * 1000000): Srandval = mt_rand():

См. также: mt_rand(), mt_getrandmax(), srand(), rand() и getran dmax().

mt_ getrandmax

Получение максимального МТ-случайного числа int mt_getrandmax (void)

Возвращает максимальное значение, которое может быть получено при вызове функции, генерирующей случайные числа, — mt_rand(). Обычно это 2 147 483 647.

См. также: mt_rand(), mt_srand(), rand(), srand() и getrandmax().

mt_ rand

Генерация МТ-случайного числа

int mt_rand ([int min [, int max]])

При вызове с необязательными параметрами min, max, определяющими соответственно минимальное и максимальное значение, генерирует и возвращает целочисленное псевдослучайное значение, лежащее включительно в указанных пределах. Если аргументы не указываются, то используются значения по умолчанию: 0 и RAND_MAX.

Не забывайте заранее инициализировать генератор случайных чисел функцией rat_srand().

Многие функции генераторов случайных чисел из старых библиотек Hbcs имеют непонятные или неизвестные характеристики, и, что более важно, они медленно работают. По умолчанию РНР использует случайный генератор из библиотеки libc в функции rand(). Функция mt_rand() является заменой. Она использует известный алгоритм Мерсена Твистера (Mersenne Twister), придумавшего его для криптографических задач, и в среднем эта функция в 4 раза быстрее, нежели аналог из библиотеки libc. Для более подробной информации смотрите домашнюю страничку автора (http://www.math.keio.ac. jp/~matumoto/emt.html), а исходный оптимизированный код алгоритма МТ доступен по адресу: http://www.scp.syr.edu/~marc/hawk/twister. html.

См. также: mt_srand(), mt_getrandmax(), srand(), rand() и getrandmax().

lcg_value

Генерация случайного дробного числа

double Icg_value(void);

Возвращает псевдослучайное дробное число в диапазоне от 0 до 1.

Тригонометрия

sin

Получение синуса аргумента

float sin (float arg)

Возвращает значение синуса аргумента агд, вычисленное в радианах.

См. также: cos() и tan().

cos

Получение косинуса аргумента

float cos (float arg)

Возвращает значение косинуса аргумента агд, вычисленное в радианах. ,

См. также: sin() и tan().

tan

Получение тангенса аргумента float tan (float arg)

Возвращает значение тангенса аргумента arg, вычисленное в радианах.

См. также: sin() и cos().

asin

Получение арксинуса аргумента float asin (float arg)

Возвращает значение арксинуса аргумента агд, вычисленное в радианах.

См. также: acos() и atan().

acos

Получение арккосинуса аргумента

float acos (float arg)

Возвращает значение арккосинуса аргумента аrg, вычисленное в радианах.

См. также: asin() и atan().

atan

Получение арктангенса аргумента float atan (float arg)

Возвращает значение арктангенса аргумента агд, вычисленное в радианах.

См. также: asin() и acos().

atan2

Получение арктангенса двух чисел float atan2 (float у, float x)

Возвращает значение арктангенса двух аргументов х и у, вычисленное в радианах.

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

См. также: acos() и atan().

Конвертация чисел

base_convert

Конвертация числа из одной системы счисления в другую

string base_convert (string number, int frombase, int tobase)

Возвращает строку, содержащую представление числа number, переведенного из системы счисления frombase, в систему tobase. Для аргументов frombase и tobase допускаются значения от 2 до 36 включительно. Цифры в числах с основанием большим, чем 10, представляются буквами от «а» до «z»; «а» означает 10, «b» — ll и т. д. до «z», означающей 35.

Sbinary - base_convert (Shexadecimal. 16. 2).

decbin

Конвертация десятичного числа в двоичное

string decbin (int number)

Возвращает строку, содержащую двоичное представление целого числа, указанного аргументом number. Наибольшее значение, которое число number может иметь, это 2 147 483 647 в десятичном представ лснии (в двоичном - это строка из 31-й единицы).

См. также bindec().

dechex

Конвертация десятичного числа в шестнадцатеричное , string dechex (int number)

Возвращает строку, содержащую шестнадцатеричное представление F целого числа, указанного аргументом number. Наибольшее значение которое число number может иметь, это 2 147 483 647 в десятичном представлении (в шестнадцатеричном - это строка 7fffffff)

См. также hexdec().

decoct

Конвертация десятичного числа в восьмеричное string decoct (int number)

Возвращает строку, содержащую восьмеричное представление ц лого числа, указанного аргументом number. Наибольшее значение которое число number может иметь, это 2 147 483 647 в десятичном представлении (в восьмеричном - это строка 17777777777).

См. также octdec().

bindec

Конвертация двоичного числа в десятичное int bindec (string_ binary_string)

Возвращает десятичный целочисленный эквивалент двоичного числа, представленного строковым аргументом binary_string. Максимальное число, которое может быть конвертировано, это строка из 31-и единицы, равная в десятичном представлении 2 147 483 647.

См. также decbin().

hexdec

Конвертация шестнадцатеричного числа в десятичное int hexdec (string hex_string)

Возвращает десятичное целочисленное значение шестнадцатеричного числа, представленного строкой hex string. Максимальное значение аргумента - «7fffffff», или 2 147 483 647 в десятичном *™

См. также dechex().

octdec

Конвертация восьмеричного числа в десятичное int octdec (string octal_string)

Возвращает десятичное целочисленное значение восьмеричного числа, представленного строкой octal_string. Максимальное значение аргумента — «17777777777», или 2 147483647 в десятичном исчислении.

См. также decoct().

deg2rad

Преобразование градусов в радианы

double deg2rad (double number)

Возвращает значение number, указанное в градусах, преобразованным в радианы.

См. также rad2deg().

rad2deg

Преобразование радианов в градусы

double rad2deg (double number)

Возвращает значение number, указанное в радианах, преобразованным в градусы.

См. также deg2rad().

number_ format

Форматирование числа

string number_format
(float number, int decimals, string dec_point, string thousands_sep)

Возвращает строку, содержащую отформатированное значение числа number. Функция может принимать либо один, либо два, либо четыре аргумента (но не три).

Если указывается один аргумент, число number будет отформатировано без указания цифр после десятичной точки, но каждая тройка тысячных цифр будет разделена запятой. Например,

echo number_format( 96739590. 345): // выведет 96.733.590.

Если указывается два аргумента, число number будет отформатировано с указанием decimals цифр после десятичной точки и каждая тройка тысячных цифр будет разделена запятой (заметьте, числа округляются и добавляются незначащие нули в конце).

echo riumber_format( 96739590. 3945.1); // выведет 9b. 739. 590. 4 echo number format (96739590 3.4); // выведет 96. /29.590.3000

Если указываются все четыре аргумента, число number будет отформатировано с указанием decimals цифр после десятичной точки (в качестве которой будет использован символ dec_point), и каждая тройка тысячных цифр будет разделена символом thousands_sep (заметьте, числа округляются и добавляются незначащие нули в конце).

echo number_format (96739590.3.3.":". ..... ); 
// выведет 96 739'590:300 

Математические функции повышенной точности BCMath

При компиляции с параметром --enable-bcmath эти функции доступны в РНР. В последних версиях РНР этот модуль встроен в РНР.

По причинам изменения лицензии сама библиотека ВСМАТН распространяется отдельно от стандартного пакета РНР. Загрузить архив библиотеки можно с адреса url: http://www.php.net/extra/number4. tar.gz. Прочтите файл README . ВСМАТН в дистрибутиве РНР для получения более подробной информации.

bcscale

Установка точности вычислений по умолчанию

string bcscale (int scale)

Устанавливает точность, которая будет использоваться по умолчанию функциями be math.

bcadd

Сложение

string bcadd (string left operand, string right operand [, int scale])

Возвращает строковое значение суммы (right_operand + left_operand) с точностью (числом десятичных знаков после запятой в результате), указанной в аргументе scale.

См. также bcsub().

bcsub

Вычитание

string bcsub (string left_operand, string right_operand [, int scale])

Возвращает строковое значение разности (right_operand_left_operand) с точностью (числом десятичных знаков после запятой в результате), указанной в apгументе scale.

См. также bcadd().

bcromul

Умножение

string bcmul (string left operand, string right operand [, int scale])

Возвращает строковое значение произведения (right_operand * left_ operand) с точностью (числом десятичных знаков после запятой в результате), указанной в аргументе scale.

См. также bcdiv().

bcdiv

Деление

string bcdiv (string left operand, string right operand [, int scale])

Возвращает строковое значение результата деления left_operand на right_operand с точностью (числом десятичных знаков после запятой в результате), указанной в аргументе scale.

См. также bcmul ().

bcmod

Получение остатка целочисленного деления

string bcmod (string left_operand, string modulus)

Возвращает остаток от целочисленного деления делимого left_operand на делитель modulus.

См. также bcdiv().

bccomp

Сравнение

int bccomp (string left_operand, string right_operand [, int scale])

Сравнивает два числа (right_operand и left_operand) с точностью (числом десятичных цифр после запятой, используемых при сравнении), заданной необязательным аргументом scale.

Возвращается целочисленный результат: 0, если два аргумента равны; + 1, если аргумент left_operand больше, чем аргумент right_operand; и -1, если left_operand меньше, чем right_operand.

bcsqrt

Извлечение квадратного корня

string bcsqrt (string operand, int scale)

Возвращает квадратный корень аргумента operand. Необязательный аргумент scale указывает число цифр после десятичной точки, которые возвращаются в результате.

См. также bcpow()

bcpow

Возведение числа в степень

string bcpow (string x, string у [, int scale])

Возвращает результат возведения числа х в степень у. Необязательный аргумент scale указывает число цифр после десятичной точки, которые возвращаются в результате.

См. также bcsqrt().

Математические функции GMP

Эти функции позволяют работать с целыми числами повышенной точности определенного формата, используя библиотеку GNU MP. Для использования их в РЫР необходимо перекомпилировать его с ключом — with-gmp.

Коды библиотеки и документацию можно загрузить с сайта http:// www.swox.com/gmp/. Требуется версия 2 или выше.

Эти функции (их большинство) могут также работать с обычными целочисленными и строковыми (содержащими целые числа) аргументами, которые автоматически преобразуются в формат GMP. Но наивысшая производительность все же достигается при непосредственном использовании чисел формата GMP; см. также gmp_init().

<'php function fact ($x) { // функция вычисления факториала if ($x <= 1) // (достаточно быстро вычисляет return 1; // факториалы до 1000) else return gmpjnul ($x. Tact ($x-D); } print gmp_strval (fact (1000)) "\n": ?>

Значения чисел GMP

gmpjnit

Создание числа GMP

resource gmp_init (mixed number)

Число GMP создается из целочисленного или строкового аргумента. В строке число может быть указано в десятичном или шестнадцате-ричном (тогда оно должно иметь префикс Ох) формате.

$а - gmp init (123456); $b - grapjrvtt ("OxFFFFDEBACDFEDF7200");

Заметьте, не всегда необходимо явно вызывать эту функцию, если нужно использовать в функциях GMP (например, gmp_add()) обычные числа или строки вместо чисел GMP. Аргументы функций GMP автоматически конвертируются при необходимости (и возможности) с использованием тех же правил, что и для функции gmp_init().

gmp_intval

Конвертация числа GMP в целое

int gmp_intval(resource gmpnumber)

Возвращает целое число, если оно не превышает его максимально возможную размерность (тип знакового длинного (32 бита) — signed long type). Если необходимо всего лишь распечатать значение, используйте gmp_strval().

gmp_strval

Конвертация числа GMP в строку

string gmp_strval (resource gmpnumber [, int base])

Возвращает строковое представление числа GMP в системе счисления base (по умолчанию, в десятичной). Возможные системы счисления — от 2 до 36.

gmp_ abs

Получение абсолютного значения числа

resource gmp_abs (resource a)

Возвращает абсолютное (то есть неотрицательное) значение числа.

gmp_sign

Получение знака числа

int gmp_sign (resource a)

Возвращает 1, если число положительное, или -1, если число отрицательное.

gmp_neg

Получение отрицательного значения числа

resource gmp_neg (resource a) Возвращает (-а).

 

Арифметика

gmp_add

Сложение

resource gmp_add (resource a, resource b)

Возвращает GMP число - сумму аргументов а и b.

gmp_sub

Вычитание

resource gmp_sub (resource a, resource b)

Возвращает GMP число - разность (a-b).

gmp_mul

Умножение

resource gmp_mul (resource a. resource b)

Возвращает GMP число - произведение аргументов а и b.

gmp_div

Синоним функции gmp_div_q

resource gmp_div (resource a, resource b [, int round])

gmp _div_q

Деление

resource gmp_div_q (resource a, resource b)

Возвращает результат деления а на b. Результат округляется в зависимости от указанного аргумента:

  • GMP_ROUND_ZERO - цифры после точки отбрасываются;
  • GMP_ROUND_PLUSINF - результат округляется в большую сторону;
  • GMP_ROUND_MINUSINF - результат округляется в меньшую сторону.

Имеется синоним функции - gmp_div().

См. также: gmp_div_r(), gmp_div_qr().

gmp_div_r

Получение остатка целочисленного деления

resource gn,p_div_r (resource n, resource d [. int round])

Функция сходна с gmp_div_q(). Остаток будет иметь знак аргумента n.

См. также: gmp_div_q(), gmp_div_qr().

gmp_div_qr

Деление с остатком

array gmp_div_qr (resource n, resource d [, int round])

Функция комбинирует действие функций gmp_div_q() и gmp_div_r() и возвращает массив, в котором элемент [0] — целое частное, а [1] - остаток.

$а = gmpjimt ("Ox41682I79fbf5"). $res = gmp_chv_qr ($a. "OxDEFE75"); pnntf( "Результат: частное» *s. остаток= %s". gmp_strval ($res[0]). gmp_strval ($res[l])):

См. также: gmp_div_q(), gmp_div_r().

gmp_mod

Получение абсолютного остатка деления

resource gmpjnod (resource n, resource d)

Функция эквивалентна gmp_div_r(), знак результата которой отбрасывается.

gmp_ divexact

Безостаточное деление

resource gmp_divexact (resource n, resource d)

Так как функция использует алгоритм «точного» деления, результат будет достоверным, только если заранее известно, что d нацело делит n.

gmp_cmp

Сравнение

int gmp_cmp (resource a, resource b)

Возвращает положительное значение, если а > b; ноль, если а = b; и отрицательное значение, если а < b.

Математика

gmp_fact

Вычисление факториала

resource gmp_fact (int a)

gmp_sqrt

Вычисление квадратного корня

resource gmp_sqrt (resource a)

gmp_sqrtrm

Вычисление квадратного корня с остатком

array gmp_sqrtrm (resource a)

Возвращает массив, в котором элемент [0] — целый квадратный корень аргумента (который также возвращается функцией gmp_sqrt()), а элемент [1] — разность между аргументом и элементом [0] в квадрате.

gmp_perfect_square

Определение, является ли число полным квадратом

bool gmp_perfect_squar~e (resource a)

Возвращает TRUE, если а является квадратом целого числа, иначе, FALSE.

См. также: gmp_sqrt(), gmp_sqrtrm().

gmp_pow

Возведение числа в степень

resource gmp_pow (resource base, int exp)

Возвращает результат возведения основания base в степень exp. Для аргументов (0,0) возвращается 1. ехр не должен быть отрицательным.

gmp_powm

Получение остатка деления степени числа

resource gmp_powm (resource base, resource exp, resource mod)

Возвращает результат: остаток от деления (основание base, возведенное в степень ехр) на mod. При отрицательном ехр результат не определен.

gmp_prob_prime

Проверка «вероятно» простого числа

int gmp_prob_pnme (resource a [, Int reps])

Функция возвращает 0, если а сложное число (имеющее более двух целых делителей). Если возвращается 1, то а, возможно, простое число. Если возвращается 2, то тогда а, без сомнения, простое число. Возможные значения аргумента reps: от 5 до 10 (по умолчанию 10) определяют качество проверки (чем больше это число, тем выше достоверность результата, то есть непринятия сложного числа за вероятно-простое).

Функция использует алгоритм вероятностного теста Мпллера-Рабина (Miller-Rabin).

gmp_ gcd

Нахождение наибольшего общего делителя

resource gmp_gcd (resource a, resource b) Возвращает всегда положительный результат.

gmp_ gcdext

Нахождение наибольшего общего делителя со множителями

array gmp_gcdext (resource a, resource b)

Возвращает в массиве значения g, s, t, такие, что a*s + b*t = g = НОД(а.b), где НОД — наибольший общий делитель.

gmp_invert

Инверсия по модулю

resource gmp_invert (resource a, resource b)

Возвращает дополнение а до значения, делящегося нацело на b. Возвращает FALSE, если результат не может быть найден.

gmp_ legendre

Получение числа Лежандра

int gmpjegendre (resource a, resource p)

Возвращает число Лежандра (Legendre symbol), р должно быть четным положительным.

gmp_jacobi

Получение числа Якоби

int gmpjacobi (resource a, resource p)

Возвращает число Якоби (Jacob! symbol), p должно быть четным положительным.

gmp_random

Генерация случайного числа

resource grap_random (int limiter)

limiter указывает длину генерируемого числа (если значение отрицательное, генерируется отрицательное число).

gmp_popcount

Получение популяции

int gmp_popcount (resource a)

Возвращает числитель популяции.

gmp_ hamdist

Вычисление дистанции

int gmp_hamdist (resource a, resource b)

Возвращает дистанцию (hamming) между а и b. Оба аргумента должны быть неотрицательными.

Бинарные операции

gmp_ and

Логическое И (AND)

resource gmp_and (resource a, resource b)

gmp_or

Логическое ИЛИ (OR)

resource gmp_or (resource a, resource Из)

gmp_xor

Логическое исключающее ИЛИ (XOR) resource gmp_xor (resource a. resource b)

gmp_setbit

Установка бита

resource gmp_setbit (resource &a, int index [, bool set_clear])

Устанавливает бит в позиции index в числе а. Аргумент set_clear указывает, в какое значение устанавливать бит: 0 или 1 (по умолчанию, в 1).

gmp_ clrbit

Сброс бита

resource gmp_c!rbit (resource &a, int index) Устанавливает бит в позиции index в числе а в значение 0.

gmp_scan0

Поиск бита 0

Oint grap_scanO (resource a, int start)

Ищет в числе а бит 0, начиная с позиции start, в сторону увеличения значимости разрядов. Возвращает позицию найденного бита.

gmp_scan1

Поиск бита 1

lint gmp_scanl (resource a, int start)

Ищет в числе а бит 1, начиная с позиции start, в сторону увеличения значимости разрядов. Возвращает позицию найденного бита.

Дата и время

time

Получение времени в секундах (UNIX timestamp)

int time(void);

Возвращаемое значение равняется числу секунд, прошедших с момента начала «Эпохи Unix» (1 января, 1970, 00:00:00 GMT). Этот формат называется «UNIX timestamp».

echo time(); // выводит, например: 987972956

См. также date().

microtime

Получение в строке текущей метки времени «UNIX timestamp»

string microtime(void);

Возвращает строку формата «msec sec», где sec — текущее время, измеренное в целых секундах с момента начала «Эпохи Unix » (0:00:00, 1 января, 1970 GMT), a msec — это микросекундная часть. Эта функция доступна только на системах, имеющих системную функцию gettimeofday().

echo microtime(); // выводит, например 0.85738800 98772251

См. также time().

getdate

Получение даты и времени в массиве array getdate (Int timestamp)

Возвращает ассоциативный массив, содержащий информацию о дате и времени, полученную в целочисленном аргументе timestamp, с разделением на следующие элементы:

  • «seconds» — секунды;
  • «minutes» - минуты;
  • «hours» - часы;
  • «mday» — день месяца;
  • «wday» — день недели, числовой;
  • «топ» — месяц, числовой;
  • «year» — год, числовой;
  • «yday» — день в году, числовой; например: 327;
  • «weekday» — день недели, текстовый, полный; например: «Friday»;
  • «month» — месяц, текстовый, полный; например: «January»;
  • 0 — «UNIX timestamp», полученный аргумент.

 print_r (getdate (time())),

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

 Array ( 
[seconds] => 50 
[minutes] => 55 
[hours] => 13 
[mday] => 16 
[wday] => 0 
[mon] => 4 > 
[year] => 2008 
[yday] => 299 
[weekday] => Sunday 
[month] => Apn 1 
[0] => 987414950 ) 

localtime

Получение времени/даты в массиве

array localtime ([int timestamp [, bool is_associative]])

Первый аргумент функции timestamp — метка времени UNIX, если он не указывается, то используется текущее время. Если второй аргумент (is_associative) равен 0 (это же значение используется по умолчанию), то возвращаемый массив будет численно индексирован; в противном случае возвращается ассоциативный массив, где элементы имеют следующее значение:

([1]). «tm_sec» — секунды;

([2]). «tmjrnn» — минуты;

([3]). «tm_hour» — часы;

([4]). «tmjnday» — день месяца;

([5]). «tmjnon» — месяц в году;

([6]). «tm_year» — год (не совместимый с 2000);

([7]). «tm_wday» — день недели;

([8]). «tm_yday» — день в году;

([9]). «tm_isdst» — активен ли переход на летнее время.

 

gettimeofday

Получение даты системным вызовом array gettimeofday (void)

Возвращает ассоциативный массив, содержащий дату, возвращенную системным вызовом. Функция является интерфейсом системной функции gettimeofday(2). Массив содержит следующие элементы:

  • «sec» — секунды:
  • «usec» — микросекунды;
  • «minuteswest» — смещение к западу от Гринвича, в минутах;
  • «dsttime» — тин dst коррекции (переход на летнее время).

checkdate

Проверка даты на соответствие григорианскому календарю

int checkdate (int month, int day, int year)

Возвращает TRUE, если дата, указанная как «month, day, year» («месяц», «число», «год»), допустима, иначе возвращает FALSE. При проверке принимаются в расчет:

  • Год (year) находится в пределах от 1 до 32 767 включительно.
  • Месяц (month) находится в пределах от 1 до 12 включительно.
  • День Б месяце (day) находится в пределах, допустимых для соответствующего месяца month (от 1 до 28-31). Високосные года при этом также принимаются в расчет.

date

Получение даты в форматированной строке

string date (string format [, int timestamp])

Возвращает строковое значение даты и времени, извлеченное из упакованного в целочисленном аргументе значения timestamp. (Если аргумент timestamp не указан, то используются текущие дата и время.)

При этом возвращаемая строка форматируется согласно указанному в строковом аргументе format значению, которое может состоять из следующих символов, заменяемых на временные компоненты:

  • s — секунды, от «00» до «59»;
  • i — минуты, от «00» до «59»;
  • g — часы, 12-часовой формат без нулей, от «1» до «12»;
  • 6 — часы, 24-часовой формат без нулей, от «О» до «23»;
  • h — часы, 12-часовой формат, от «01» до «12»;
  • Н — часы, 24-часовой формат, от «00» до «23»;
  • а — «до» или «после» полудня: «am» или «рт»;
  • А — «До» или «После» полудня: «AM» или «РМ»;
  • d — день месяца (2 цифры с нулями), от «01» до «31»;
  • j — день месяца (1-2 цифры без пулей), от «1» до «31»;
  • S — англоязычный суффикс числа из двух букв, например: «th», «nd»;
  • l (маленькая 'L') — название дня недели по-английски; например: «Friday»;
  • D — трехбуквенное английское сокращение дня недели; например: «Fri»;
  • w — порядковое число дня в неделе, от «О» (воскресенье) до «6» (суббота);
  • z — порядковое число дня в году, от «О» до «365»;
  • т — месяц (2 цифры с нулями), от «01» до «12»;
  • п — месяц (1-2 цифры без нулей), от «1» до «12»;
  • F — английское название месяца, например: «January»;
  • М — трехбуквенное английское сокращение месяца, например: «Jan»;
  • t — число дней в указанном месяце, от «28» до «31»;
  • Y — год, 4 цифры; например: «1999»;
  • у — год, 2 цифры; например: «99»;
  • I (большая i) — «1», если действует переход на «летнее время», иначе «О»;
  • L — «О», если год не високосный, или «1», в противном случае;
  • В — «Swatch Internet time»;
  • Т — временная зона компьютера, например: «MDT» (доступна не всегда);
  • U — целое число секунд, прошедших с момента начала эпохи UNIX (доступна не всегда);
  • Z — смешение временной зоны в секундах (от «-43200» до «43200»).

Все остальные символы в строковом аргументе format возвращаются в результирующей строке «как есть». Формат «Z» всегда возвращает «О» при использовании с функцией gmdate().

print (date ("1 dS of F Y h.i.s A")); //выводит: Monday 21th of April 2007 01:33:43 PM Дата и время 141 print ("1-е Июля. 2000 года - это: " . date ("I". mktime(0.0.0,7.1.2000))). //выводит: 1-е Июля. 2222 года - это- Saturday Stomorrow = mktime (O.O.O.dateC'm") .date("d")+l.date("Y")). Slastmonth = mktime (0.0.0.date("m")-l.date("d"). dateC'Y")); Snextyear = mktime (O.O.O.dateC'm"), dateC'd"). date("Y")+l):

Для форматирования дат в других языках используйте функции setlocale() и strftime().

См. также: gmdate() и mktime().

gmdate

Аналог функции date() для времени GMT

string gmdate (string format, int timestamp)

Функция подобна date(), за исключением того, что возвращается время по Гринвичу (Greenwich Mean Time — GMT). Например, при запуске в Финляндии (GMT +0200) первая строка напечатает «Jan 01 1998 00:00:00», а вторая: «Dec 31 1997 22:00:00».

echo date ("К d Y H:i.s". mktime (0.0.0.1.1.1998)): echo gmdate ("M d Y H.i s". mktime (0.0.0.1.1.1998)).

См. также: date(), mktime() и gmmktime().

strftime

Получение форматированной строки времени с использованием локальных установок

string strftime (string format [, int timestamp])

Возвращает строку согласно формату, указанному в аргументе format, для указанной в аргументе timestamp метки времени (если метка времени не указывается, то используется текущее время). Язык, на котором выводятся названия месяцев и дней, устанавливается функцией set!оса!е(). В строке формата распознаются следующие спецификаторы:

  • %а — сокращение дня недели в языке по умолчанию; например, «Wed»;
  • %А — полное название дня недели в языке по умолчанию; например, «Wednesday»;
  • %b - сокращение названия месяца в языке по умолчанию; например, «Apr»;
  • %В — полное название месяца в языке по умолчанию; например, «April»;
  • %с — формат латы времени в установках по умолчанию; например, «04/18/00 13:44:17»;
  • £С — номер века (год, деленный на 100 и без дробной части, от 00 до 99);
  • %d — число месяца (от 00 до 31);
  • %0 — эквивалент #m/£d/£y;
  • %е — число месяца (вместо незначащего нуля ставится пробел), от « 1» до «31»;
  • %h — аналог Яb;
  • %H— час в 24-часовом счислении (от 00 до 23);
  • %I — час в 12-часовом счислении (от 01 до 12);
  • %j — номер дня в году (от 001 до 366);
  • %т — номер месяца (от 01 до 12);
  • М - минуты;
  • %n — символ перехода на новую строку;
  • %р — «am» или «рт» (до или после полудня), в зависимости от времени;
  • %г — время в 12-часовом формате (a.m. или p.m.);
  • %R — время в 24-часовом формате;
  • %S — секунды;
  • %t — символ табуляции;
  • %Т — текущее время, эквивалентно #H:#M:#S;
  • %и — число дня в неделе (от 1 до 7), где понедельник - 1;
  • %11 — номер недели в году (первое воскресенье года считается первым днем первой недели);
  • %V — номер недели в году по стандарту ISO 8601:1988 (от 01 до 53), где первая неделя — та, в которой насчитывается более 3 дней в текущем году;
  • %U — номер недели в году, начиная с первого понедельника, как первого дня первой недели;
  • %w — номер дня в неделе (от 0 до 6). Воскресенье считается нулем;
  • %х — представление даты в системном формате без указания времени; например, «04/19/01»;
  • %Х — представление времени в системном формате без указания даты; например, «14:06:26»;
  • %у — год без цифр века (от 00 до 99);
  • %Y — полное число года;
  • %Z — зона времени, имя или сокращение, например «Московское время (лето)»;
  • %% — символ «%».

setlocale ("LCJIME". "С"): print (strftime ("%/\ in Finnish is ")). setlocale ("LCJIME". "fi_FI"): print (strftime ("3LA. in French ")): setlocale ("LCJIME". "fr_CA"); print (strftime ("$A и in German ")); setlocale ("LCJ-IME". "de_DE"). print (strftime ("ЛАЛп")):

Этот пример будет работать, если ваша система поддерживает соответствующие национальные установки. И не забывайте, не все системы поддерживают весь набор спецификаторов формата.

См. также: setlocale(), mktime() и «Open Group specification of strftime()» (http://www.opengroup.org/onlinepubs/7908799/xsh/strftime.htmL).

gmstrftime

Форматирование локальных времени/даты

string gmstrftime (string format, int timestamp)

Действие функции подобно strftimeO с тем отличием, что возвращается время по Гринвичу (GMT). Например, при запуске в зоне (GMT -0500) первая строка будет следующей: «Dec 31 1998 20:00:00», а вторая: «Jan 01 1999 01:00:00».

setlocale ('LCJIME'. 'en_US'). echo strftime ("%b Ы *Y *H:ZM:ZS". mktime (20.0.0.12 31.98)),"\n' . echo gmstrftime ("*b *d *Y XOM-XS". mktime (20.C.0.12 31.98))."\n";

См. также strftime().

mktime

Преобразование времени в целочисленный формат

int mktime (int hour, int minute, int second, int month, int day, int year [, int is_dst])

Аргументы функции должны быть указаны в порядке: «час, минута, секунда, месяц, день, год, коррекция_времени>>, что часто путают. Не указывать можно только последний аргумент is_dst (при неуказании большего числа аргументов справа вместо них будут подставляться значения текущего времени). Функция возвращает метку времени «Unix timestamp», соответствующую указанным дате и времени (это целое число секунд, прошедших с 1 января 1970 года).

Аргумент is_dst, указывает, осуществлен ли переход на летнее время (1) или нет (0); если это неизвестно, то аргумент — (-1).

Функция полезна при вычислении дат и их проверке, так как она автоматически корректирует время при неправильном указании временных границ. Например, все следующие строки напечатают: «Jan-01-1998».

echo date ("M-d-Y". mktime (0.0.0.12,32.1997)): echo date ("M-d-Y". mktime (0.0.0.13.1.1997)). echo date ("M-d-Y". mktime (0.0.0.1.1.1998)): echo date ("M-d-Y". mktime (0.0.0.1.1.98)):

Год может быть указан двумя (0-69 означают 2000-2069 и 70-99 означают 1970-1999) или четырьмя цифрами.

Последний день месяца может быть указан как нулевой следующего (но не как -1). Следующие строки выведут: «Последнее число Февраля 2000: 29».

Slastday • mktime (0.0.0.3.0.2000). echo strftime ("Последнее число Февраля 2000: И". Slastday). Slastday - mktime (0 0.0.4.-31.2000): echo strftime ("Последнее число Февраля 2000: Id", Slastday):

Даты, в которых год, месяц или день равны нулю, считаются недопустимыми (в таком случае, это будет дата: 30.11.1999).

См. также: date ()и tirae().

gmmktime

Аналог функции time для времени GMT

int gmmktime (int hour, int minute, int second, int month, int day, int year [, int is_dst])

Функция подобна mktime(), за исключением того, что передаваемые параметры представляют время по Гринвичу (GMT).

См. также gmdate().

strtotime

Лексическое преобразование строки времени в «UNIX timestamp» int strtotime (string time [, int now])

Функция ожидает получить дату time в англоязычном формате, чтобы преобразовать ее в целочисленный формат «UNIX timestamp».

echo strtotime ("now") . "\n"; echo strtotime ("10 September 2000") "\n"; echo strtotime ("+1 day") . "\n" echo strtotime ("+1 week") . "\n"; echo strtotime ("+1 week 2 days 4 hours 2 seconds") . "\n":

Строковые функции

Вывод

print

Вывод строки, значения переменной или выражения

print (string arg)

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

См. также: echo(), printf() и flush().

echo

Вывод одного или нескольких значений

echo (string argl, string [argn]...)

Выводит значения перечисленных параметров.

EchoO — это фактически языковая конструкция, поэтому для нее не обязательны скобки, даже если используется несколько аргументов.

echo "Hello World": echo "Перенос на следущую строку. имеющийся в коде, сохраняется и используется при выводе". " чтобы избежать этого используйте ". "оператор конкатенации": echo "This spans\nmultiple lines. The newlines will be\noutput as well.":

См. также: print(), printf() и flush().

printf

Вывод отформатированной строки

int printf (string format [, mixed args...])

Выводит строку согласно формату, указанному в строковом аргументе format, который рассмотрен в описании функции sprintf().

См. также: print(), sprintf(), sscanf(), fscanf() и flush().

sprintf

Форматирование строки с подстановкой переменных

string sprintf (string format [, mixed args...])

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

Строка форматирования может состоять из неопределенно длинной последовательности символов и директив: ординарных символов (это любые символы, за исключением «%»), которые просто копируются в возвращаемую строку, и «спецификаций отображения», для каждой из которых в функции должен быть указан соответствующий параметрт касается как функции sprintf(), так и printf().

Каждый спецификатор состоит из знака процента (%), за которым следуют один или более следующих элементов в указанном порядке.

  1. Необязательный спецификатор заполнителя, определяющий, каким символом будут дополняться строки до необходимой длины. Это может быть пробел или нулевой символ. По умолчанию используется пробел. Альтернативные символы-заполнители могут быть >к.') юны, если перед ними ставится знак одинарной кавычки ('). Например, printf CTz5d",12); // выведет: zzz!2.
  2. Необязательный спецификатор выравнивания. Если он не указывается, ч о значение будет выравниваться по правой стороне, если он указан (как символ «а»), то по левой (действует не всегда).
  3. Необязательный спецификатор ширины значения указывает минимальное число символов, которое должно выводиться в значении
  4. Необязательный спецификатор точности определяет, сколько цифр после запятой должно выводиться для дробных чисел (для чисел других типов не действует). (Для форматирования чисел также полезна функция number_format().)
  5. Спецификатор типа — сообщает, в качестве какого типа должен рассматриваться аргумент. Возможные типы:
  • X — сам знак процента;
  • b — целочисленный аргумент в двоичном формате;
  • с — выводит символ, целочисленный ASCII-код которого указан;
  • d — целочисленный аргумент в десятичном формате;
  • f — дробное число в формате числа с плавающей точкой;
  • о — целочисленный аргумент в восьмеричном формате;
  • s — аргумент выводится как строка;
  • х — целочисленный аргумент в шестнадцатеричном формате (с маленькими буквами);
  • X — целочисленный аргумент в шестнадцатеричном формате (с большими буквами).

См. также: printf(), sscanf(), fscanf() и number_format().

Sisodate = spnntf ("M4d-M2d-M2d". Syear. $month. $day);

$formatted = sprintf (%01.4f. 68 75 + 54.35);

sscanf

Интерпретация строки согласно формату и занесение значений в переменные

mixed sscanf (string str. string format [, string varl...])

Функция является противоположностью printf(). Она интерпретирует строку str согласно формату format, аналогично спецификации printf(). При указании только двух аргументов полученные значения возвращаются в массиве.

// получение серийного номера Ssenal = sscanf ("SN/235-0001".nSN/*3d-«4d"): echo Sseria1[0]*lGOOO+$senal[l]; // выводит: 2350001 // и даты изготовления Smandate = "January 01 2000": list($month. $day. Syear) = sscanf(Smandate."%s Id %d"): echo "Дата: Syear-" substr($month.0.3)."-$day\n". // выводит: 2000-Jan-Ol

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

// генерировать XML запись из строки Sauth = "765\tLewis Carroll": $n = sscanf (Sauth. "*d\«s Zs" . &$id. &$first. &$last); echo "<author id='$id'> <f i rstname>$fi rst</firstname> <surnarne>$last</surname> </author>\n";

См. также: fscanf(), printf() и sprintf().

bin2hex

Преобразование символьных данных в шестнадцатеричный вид

string bin2bex (string str)

Возвращает строковое шестнадцатеричнос представление символьно-байтовых данных, содержащихся в строке str. Конвертация производится нобайтово, старший полубайт указывается первым.

echo Din2hex("AaBblM"): // выводит. 4161426286а6

chr

Получение символа с указанным кодом ascii

string chr (int ascii)

$str = cnr (27). /* добавляет esc-символ в конец строки $str */ $str = sprintf ("Строка завершается esc-символои. 3tc". 27); Функция дополняет ord().

См. также sprintf ()с форматом %с.

ord

Получение ascii кода символа

int ord (string string)

Возвращает ASCII код первого символа строки string. Эта функция дополняет chr ().

if (ord ($str) == 10) { // символ «\n» echo "Первый символ строки \$str - переход на новую строку.\n": }

См. также chr ().

substr

Получение части строки

string substr (string string, int start [, int length]) Возвращает часть строки string от позиции start длиной length.

Если аргумент start положительный, то возвращается часть строки string начиная с позиции start, с отсчетом от нуля.

Irest = substr ("abcdef". 1): // возвращает "bcdef" Srest = substr ("abcdef". 1.3); // возвращает "bed"

Если аргумент start отрицательный, то отсчет производится от конца строки string (тогда -1 — это последний символ).

Srest - substr ("abcdef". -1). // возвращает "f" $rest = substr ("abcdef". -2); // возвращает "ef" Jrest = substr ("abcdef". -3. 1); // возвращает "d"

Если указывается необязательный аргумент length и он положительный, то это определяет длину возвращаемой строки. Если он отрицательный, то тогда он указывает на позицию последнего возвращаемого символа от конца исходной строки (и тогда -1 — это предпоследний символ).

$rest = substr ("abcdef". 1. -1). // возвращает "bcde"

См. также: strrchr(), substr_count() и ereg().

str_repeat

Получение строки из повторяющегося значения

string str_repeat (string input, int multiplier) .

echo str_repeat ("-=". 3). // выведет "-=-=-=".

str_pad

Дополнение строки другой строкой до определенной длины

string str_pad (string input, int padjength [, string pad_string [, int pad_type]])

Аргумент input содержит исходную строку. Аргумент pad_length указывает, какую длину должна иметь возвращаемая строка, и если он имеет значение меньшее, чем исходная строка, никакого добавления не производится.

Необязательный аргумент pad_string указывает, какую строку использовать в качестве заполнителя; по умолчанию используются пробелы. Необязательным аргументом pad_type могут быть значения: STR_ PADJtIGHT (по умолчанию), STR_PAD_LEFT или STR_PAD_BOTH, указывающие соответственно, что строку следует дополнять справа, слева или с обеих сторон.

Sinput = "Aaaaa"; print str_pad(Sinput. 10); // возвращает "Aaaaa print str_pad($input. 10. "-=" . STR_PAD_LEFT). // возвращает "---=-Ааааа" print str_pad($input. 10 . "_". STR_PAD_BOTH). // возвращает "_Ааааа___"

chunk_split

Фрагментирование строки

string chunk_split (string string [, int chunklen [, string end]])

Возвращает строку, в которой между каждым блоком строки string длиной chunklen (по умолчанию 76) вставляется последовательность разделителей end (по умолчанию: «\г\п»). Это может быть полезно при конвертировании в формат «base64» для соответствия правилам RFC 2045.

# форматировать Sdata. используя семантику RFC 2045 $new_stnng = chunk_split (base64_encode($data)):

Эта функция работает значительно быстрее, чем ereg_replace().

См. также wordwrap().

strtok

Получение строки по частям

string strtok (string argl, string arg2)

При первом вызове функция принимает два аргумента: исходную строку argl и разделитель агд2. При каждом последующем вызове аргумент argl указывать не следует, иначе будет возвращаться первая часть строки. При каждом вызове (включая первый) возвращается часть строки до разделителя агд2, при каждом последующем -следующая часть до следующего разделителя, и так до конца строки. Когда возвращать больше нечего, возвращается значение FALSE. Заметьте, если часть строки состоит из 0 (или это пустая строка), то это будет воспринято как значение FALSE.

$stnng = "This is an example№string№ Aaa". $tok = strtok ($stnng." "); while ($tok) { echo "'$tok' ": $tok = strtok (" №"): } // выводит 'This' 'is' 'an' 'example' 'string'

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

См. также: split() и explode().

explode

Разделение строки в массив

array explode (string separator, string string [, int limit])

Возвращает массив строк, каждая из которых соответствует фрагменту исходной строки string, находящемуся между разделителями, указанными аргументом separator. При указании аргумента limit возвращаемый массив будет содержать не более указанного limit числа элементов с оставшейся неразделенной частью строки в последнем элементе.

$АА - "часть! часть? часть.З часть4"; $аа = explode (" ". $АА). // теперь аа = Arrays [0] => часть!. [1] ~> часть2. // Ш -> частьЗ. [31 -> ", [4j => часть4 )

См. также: split() и implode().

implode

Объединение элементов массива в строку

string implode (string glue, array pieces)

Возвращает строку, содержащую последовательно все элементы массива pieces, между которыми вставляется значение строкового аргумента glue.

$colon_separated= implode (" ". lady);

См. также: explode(), join() и split().

join

Синоним функции implode()

string join (string glue, array pieces)

См. также: explode(), implode() и split().

setlocale

Установка региональных настроек

string setlocale (string category, string locale)

Устанавливает указанную аргументом category региональную установку для строковых преобразований, которая может принадлежать к одной из следующих категорий:

  • LC ALL — для всех установок (например: "Russian _Russia.l251");
  • LC_COLLATE — сравнение строк (пока не реализовано в РНР);
  • LC_CTYPE — классификация и преобразование символов, например strtoupper();
  • LC_MONETARY — для функции localeconv() (пока не реализовано в РНР):
  • LC_ NUMERIC — десятичный разделитель чисел;
  • LC_TIME — форматирование даты и времени функцией strftime().

В аргументе locale указывается то значение настройки, которое необходимо установить. При передаче пустой строки «» региональные установки будут установлены в соответствии с имеющимися в системе по умолчанию. Если передается ноль (строковый или числовой), региональные настройки не изменяются, а возвращается текущее значение установки.

Функция возвращает новое установленное значение настройки или FALSE при ошибке. Если указывается неправильное значение категории, выдается предупреждение.

Вычисления строковых сумм и хешей

strlen

Вычисление длины строки

int strlen (string str)

count_chars

Получение информации о символах строки

mixed count_chars (string string [. mode])

Вычисляет частоту встречаемости каждого байта (0-255) в строке string и возвращает в массиве результат согласно аргументу mode:

  • 0 — массив с байтами в качестве индексов и частотой в качестве значений элементов массива (по умолчанию, если аргумент mode не указан);
  • 1 — то же, что и 0, но отсутствующие в строке string байты не возвращаются;
  • 2 — то же, что и 0, но возвращаются только тс байты, которые отсутствуют;
  • 3 - возвращается строка, состоящая из всех обнаруженных символов;
  • 4 - возвращается строка, состоящая из всех отсутствующих символов.

сгс32

Получение полиминала строки сгс32 int crc32 (string str)

Вычисляет 32-битовый циклический код избыточности строки str, обычно используемый для проверки целостности переданных данных.

См. также md5().

md5

Вычисление строки-хеша MD5 string md5 (string str)

Возвращает вычисленный строковый MD5-xem строки str, используя «RSA Data Security, Inc. MD5 Message-Digest Algorithm», описанный в файле RFC1321 (http://www.faqs.org/rfcs/rfcl321.html). Часто используется для генерации уникальных идентификаторов. Возвращается 32-значнос число, состоящее из шсстнадцатеричных цифр.

См. также сгс32().

crypt

Симметричное шифрование

string crypt (string str [, string salt])

Функция является реализацией имеющегося в Unix алгоритма шифрования DES1. Аргумент str — это шифруемая строка, a salt — начальное (двухбайтовое)2 основание шифра (если оно не указано, то оно случайным образом генерируется). Функция рассмотрена в справочной системе Unix (man). Некоторые системы заменяют стандартный метод шифрования DES методом MD5.

В системах, поддерживающих несколько алгоритмов шифрования, следующие константы устанавливаются равными 1 или 0, в зависимости от того, поддерживается данный алгоритм или нет:

  • CRYPT_STD_DES — стандартное 2-байтовое DES-шифрование (SALT-2);
  • CRYPT_EXT_DES — расширенное 9-байтовое DES-шифрование (SALT=9);
  • CRYPT_MD5 — 12-байтовое МО5-шифрование (SALT начинается с$1$);
  • CRYPT_BLOWFISH — расширенное 12-байтовое DES-шифрование (SALT начинается с $2$).

Так как функция использует односторонний алгоритм шифрования, функции дешифрования не имеется.

См. также md5().

metaphone

Вычисление метафон-хеша string metaphone (string str)

Функция, сходная по действию с soundex(), вычисляет код произношения слова, переданного в строке str, но с повышенной точностью вычислений, так как использует правила произношения английского языка. Возвращаемое строковое значение может быть переменной длины.

Алгоритм функции разработан Лоуренсом Филипсом (Lawrence Philips, lphilips@verity.com) и описан в книге: «Practical Algorithms for Programmers», Binstock & Rex, Addison Wesley, 1995.

soundex

Вычисление хеша сходности произношения

string soundex (string str)

Функция может быть использована для проверки правописания, когда приблизительно известно как звучит слово, но не известно, как оно пишется, и имеется словарь (база данных), относительно которого возможно осуществлять проверку. Возвращается строка из 4 символов: первая буква слова и 3 цифры.

Алгоритм функции описан Дональдом Кнауфом (Donald Knuth) в книге «The Art of Computer Programming, vol. 3: Sorting and Searching», Addison-Wesley (1973).

sOundex ("Euler") == sOundex ("tilery") == 'E460'; sOundex ("Gauss") == sOundex ("GhOsh") =•* 'G200'; sOundex ("Hilbert") " sOundex ("HenlbrOnn') "- 'H416'. soundex ("Knuth") — sOundex ("Kant") =- 'K530': sOundex ("Lloyd") == sOundex ("Ladd") -= 'L300'; sOundex ("Lukasiewicz") == sOundex ("Lissajcus") -= '1222' :

Сравнение

strcmp

Сравнение строк

int strcmp (string strl. string str2)

Возвращает < 0, если strl «меньше» str2; > 0 если strl «больше» str2, и (), если они равны. Регистр в строках учитывается.

См. также: ereg(), strcasecmp(), substr(), stristr(), strncasecmp(), strncmp() и strstr().

strncmp

Сравнение начала строк

Int strncmp (string strl, string str2, int Ten)

Функция отличается от strcmp() тем, что строки strl и str2 сравниваются не целиком, а только их первые len байтов. Если len меньше, чем длина меньшей из строк, они сравниваются целиком. Возвраща-ет <0, если strl «меньше» str2; >0 если strl «больше» str2, и 0, если они равны. Регистр в строках учитывается.

См. также: ereg(), strncasecmp(), strcasecmp(), substr(), stristr(), strcmp() и strstr().

strcasecmp

Сравнение строк без учета регистра

int strcasecmp (string strl, string str2)

Возвращает < 0, если strl «меньше» str2; > 0 если strl «больше» str2, и (), если они равны. Регистр символов строк не учитывается.

$varl = "HellO"; $var2 = "hello". if (fstrcasecmp (Svarl. $var2)) { echO 'Svarl == $var2 при сравнении строк без учета регистра'. }

См. также: ereg(), strcrap(), substr(), stristr(), strncasecmp() и strstr().

strncasecmp

Сравнение начал строк без учета регистра

int strncasecmp (string strl, string str2, int len)

Функция является комбинацией strcasecmp() и strncmp().

См. также: ereg(), strcasecmp(), strcmp(), substr(), stristr() и strstr().

strnatcmp

«Естественное» сравнение строк

int strnatcmp (string strl, string str2)

Функция имитирует такое сравнение строк, какое использовал бы человек, как показано ниже:

$arrl = $агг2 = array ("img!2 png"."imgl0.png"."img2.png"."imgl.png"); echO "Обычная сортировка \n"; usOrt($arrl."strcmp"). print_r($arrl). echO "\n«Естественная» сортировка \n": usOrt($arr2."strnatcmp"); print_r($arr2);

При запуске будет выдано следующее:

Обычная сортировка Array ( [0] => imgl.png [1] => imglO.png [2] => img!2 png [3] => img2.png ) «Естественная» сортировка Array ( [0] => imgl.png [1] => img2.png [2] => imglO.png [3] => img!2.png )

Для более подробной информации смотрите страницу Мартина Пула «Natural Order String COmparisOn» (http://www.linuxcare.cOm.au/ prOjects/natsOrt/).

Во всем остальном функция ведет себя подобно всем остальным функциям сравнения: возвращает < 0, если strl «меньше» str2; > 0 если strl «больше» str2, и 0, если они равны. При этом регистр сравниваемых строк учитывается.

См. также: егед(), strcasecmp(), substr(), stristr(), strcmp(), strncmp(), strncasecmp(), strnatcasecmp(), strstr(), natsOrt() и natcasesort().

strnatcasecmp

«Естественное» сравнение строк без учета регистра int strnatcasecmp (string strl, string str2)

Дополнение функции strcmp(), которое игнорирует при сравнении регистр.

См. также: егед(), strcasecmp(), substr(), stristr(), strcmp(), strncmp(), strncasecmp(), strnatcmp() и strstr().

simila_r text

Определение схожести двух строк

int similar_text (string first, string secOnd [, dOuble percent])

Функция вычисляет схожесть двух строк по алгоритму, описанному Оливером (Oliver [1993]). Но вместо стека (как в псевдокоде Оливера) она использует рекурсивные вызовы. Сложность алгоритма делает функцию медленной, и ее скорость пропорциональна (N3), где N — длина наибольшей строки.

Возвращается число символов, совпавших в обеих строках. При передаче по ссылке третьего необязательного аргумента в нем сохраняется процент совпадения строк.

levenshtein

Определение различия Левенштейна двух строк int levenshtein (string strl, string str2)

int levenshtein (string strl, string str2, int cOst_ins, int cOst_rep, int cOst_del)

int levenshtein (string strl, string str2. function cOst)

«Различие Левенштейна» — это минимальное число символов, которое требовалось бы заменить, вставить или удалить для того, чтобы превратить строку strl в str2. Сложность алгоритма пропорциональна произведению длин строк strl и str2 (это делает функцию более быстродействующей, чем similar_text()).

Первая форма функции возвращает число необходимых операций над символами строк для трансформации strl в str2.

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

Вариант три, который еще не реализован, позволит указывать функцию, используемую для расчета сложности трансформации. Функция cOst будет вызываться со следующими аргументами:

  • применяемая операция (вставить, изменить, удалить): «I», «R», «D»;
  • фактический символ первой строки;
  • фактический символ второй строки;
  • позиция строки 1;
  • позиция строки 2;
  • оставшаяся длина строки 1;
  • оставшаяся длина строки 2.

Вызываемая функция должна будет возвратить стоимость этой операции.

Если длина одной из строк более 255 символов, функция levenshtein() возвращает -1, но такая длина более чем достаточна.

См. также: sondex(), similar_text() и metaphone().

Поиск

strchr

Поиск первого вхождения символа в строку

string strchr (string haystack, string needle) Функция является синонимом для strstr().

strstr

Нахождение первого вхождения подстроки

string strstr (string haystack, string needle)

Возвращает оставшуюся часть строки haystack, которая начинается с первого фрагмента, указанного в аргументе needle. Если это не удается, то возвращает FALSE. Функция чувствительна к регистру.

Если needle не строка, то тогда значение преобразуется в целое и используется как код искомого символу.

$email = 'ntymail@designmultimedia.com'. $dOmain = strstr (Semail. '(?'). tdOmain = strstr (Semail. Ord('P')): // можно и так print SdOmain: // выводит- @designinultimedia.com

См. также: stristr(), strrchr(), substr() и ereg().

stristr

Аналог strstr, нечувствительный к регистру

string stristr (string haystack, string needle)

Возвращает оставшуюся часть строки haystack, которая начинается с фрагмента, указанного в аргументе needle. Если это не удается, то возвращает FALSE. Функция Нечувствительна к регистру.

Если needle не строка, то тогда его значение преобразуется в целое и используется как код искомого символа.

См. также: strchr(), strrchr(), substr() и ereg().

strrchr

Поиск последнего вхождения подстроки

string strrchr (string haystack, string needle)

Возвращает оставшуюся часть строки haystack, которая начинается с последнего фрагмента, указанного в аргументе needle. Если это не удастся, то возвращает FALSE. Функция чувствительна к регистру.

Если needle не строка, то тогда его значение преобразуется в целое и используется как код искомого символа; если это строка, содержащая более одного символа, то используется первый.

// получить последний каталог в $РАTH $aiг = substr (strrchr (SPATH. ":"). 1): // получить все после последнего перевода строки $text = "Line IXnLine 2\nLine 3". $last = substr (strrchr (Stext. 10). 1 ):

См. также: substr(), stristr() и strstr().

strpos

Определение первой позиции фрагмента в строке

int strpOs (string haystack, string needle [. int Offset])

Возвращает численную позицию первого вхождения строки needle в строку haystack. Возвращает FALSE, если вхождение не найдено. Заметьте, что функция возвратит одинаковое значение 0, если строка haystack начинается с фрагмента needle. В примере ниже показан метод обработки случая:

$pOs = strpOs (Smystnng. "b"): if (SpOs = FALSE) ( // идентичность- три знака равемс'-..: // nOt fOund . }

Если аргумент needle — не строка, то тогда его значение преобразуется в целое и используется как код искомого символа.

Необязательный аргумент Offset позволяет указать, с какой позиции строки haystack начинать поиск.

См. также: strrpos(), strrchr(), substr(), stristr() и strstr().

strrpos

Определение последней позиции фрагмента в строке

int strrpos (string haystack, char needle)

Возвращает численную позицию последнего вхождения симиола needle в строку haystack. Возвращает FALSE, если вхождение не найдено. Заметьте, что функция возвратит одинаковое значение 0, если символ является первым в строке и если он в строке не присутствует. В примере ниже показан метод обработки этого случая:

$pos = strrpos ($mystnng. 'b"). it (SpOs = FALSE) { // идентичность- три знака равенства // not found . }

Если аргумент needle — не строка, то тогда его значение преобразуется в целое и используется как код искомого символа; если это строка, содержащая более одного символа, то используется первый.

См. также: strpos(), strrchr(), substr(), stristr() и strstr().

substr count

Определение числа вхождений фрагмента в строку

int substr_count (string haystrack, string needle)

Возвращает число фрагментов needle, присутствующих в строке haystrack.

print substr_count("This is a test", "is"). // = 2

strspn

Определение присутствия начальных символов в строке

int strspn (string strl, string str2)

Возвращает длину начального фрагмента строки strl, состоящего полностью из символов, имеющихся в строке str2.

strspn ("42 is ...". "1234567890"). // = 2

См. также strcspn().

strcspn

Определение отсутствия начальных символов в строке int strcspn (string strl, string str2)

Возвращает длину начального фрагмента строки strl, состоящего полностью НЕ из символов, имеющихся в строке str2.

См. также strspn().

Простые манипуляции

Itrim

Удаление начальных пробелов

string Itrim (string str)

Возвращает исходную строку str, из которой удалены начальные пробельные символы (такими символами являются: «\n», «\r», «\t», «\v», «\0» и пробел).

См. также: chop(), rtrim() и tnm().

rtrim

Синоним функции chop()

string rtrim (string str)

$tnimed -- rtrim ;$line).

См. также: trim(), Itrim().

chop

Удаление конечных пробелов

string chop (string str)

Возвращает полученную строку без завершающих пробельных символов, включая переходы на новую строку. (Одноименная функция в Perl, помимо этого, удаляет последний символ строки.)

См. также: trim(), Itrim(), rtrim() и chop().

trim

Удаление начальных и конечных пробелов

string trim (string str)

Возвращает исходную строку str, из которой удалены начальные и конечные пробельные символы (такими символами являются: «\п», «\г>>, «\t», «\v», «\0» и пробел).

См. также: chop(), rtrim() и Itrim().

strrev

Реверс строки

string strrev (string string)

Возвращает строку string «задом наперед».

strtolower

Преобразование символов сгроки в нижний регистр

string strtolower (string str)

Возвращает строку string, в которой все алфавитные буквы делаются маленькими (lowercase). Понятие «алфавитные» определяется локальными установками. Обычно символы кириллицы не конвертируются (или конвертируются неправильно).

$str = "HeLLo World". $str = strtolower($str); print $str: # Выводит, hello world

См. также: strtoupper() и ucfirst().

strtoupper

Преобразование символов строки в верхний регистр

string strtoupper (string string)

Возвращает строку string, в которой все алфавитные буквы делаются большими (uppercase). Понятие «алфавитные» определяется локальными установками. Обычно символы кириллицы не конвертируются (или конвертируются неправильно).

$str = "Hello": $str = strtoupper ($str): print $str. # выводит HELLO

См. также: strtolower() и ucfirst().

ucfirst

Преобразование первого символа строки в заглавный

string ucfirst (string str)

Если первый символ строки — строчная буква, то в возвращаемой строке она становится заглавной. Символы кириллицы могут быть неправильно конвертированы.

Stext = 'hello hello'. Stext = ucfirst (Stext): // теперь Stext = Hello hello

См. также: strtoupper() и strtolower().

ucwords

Преобразование первого символа каждого слова в заглавный string ucwords (string str)

Stext = 'hello hello': itext = ucwords(Itext). // теперь Stext = Hello Hello

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

См. также: strtoupper(), strtolower() и ucfirst().

strtr

Замена указанных символов

string strtr (string str, string from, string to)

string strtr (string str, array from)

Возвращается строка str, в которой каждый символ, присутствующий в строке from, заменяется на корреспондирующий из строки to. Если строки from и to различной длины, то «лишние» конечные символы длинной строки игнорируются.

$addr = strtr(Saadr. "абвгд". "fbcde"):

Во второй форме функция возвращает строку, в которой фрагменты строки str заменяются на соответствующие индексам значения элементов массива from. В этом случае функция пытается заменить сначала наибольшие фрагменты исходной строки и не выполняет замену в уже модифицированных частях с сроки.

$trans = array ("hello" => "hi", "hi" => "hello"): echo strtrC'hi all. ! said hello". Strans) . "\n": // выведет "hello all I said hi".

См. также ereg_replace().

str_replace

Замена фрагментов

string str_replace (string needle, string str, string haystack)

Возвращает строку haystack, в которой все фрагменты needle заменены значением строки str. Также функция может работать с двоичными строками. Эта функция в простых случаях может успешно заменить ereg_replace().

Sbodytag = str_replace ("*body_coU". "black". "<body color^body_coU>"):

См. также: ereg_replace() и strtrt).

substr_ replace

Замена части строки

string substr_replace (string string, string replacement, int start [, int length])

Возвращает строку string, в которой часть от символа с позицией start и длиной length (или до конца, если аргумент длины не указан) заменяется строкой replacement.

Если значение start положительно, отсчет производится от начала строки string, иначе — от конца (-1 — последний символ строки).

Если значение length неотрицательно, тогда оно указывает длину заменяемого фрагмента. Если оно отрицательно, то это число символов от конца строки string до последнего символа заменяемого фрагмента (со знаком минус).

 <?php 
$var = 'ABCDEFGH:/MNRPQR/': 
echo "Original: $var\n": 
/* замена строки целиком (от 0 символа до 
последнего) */ echo substr_rep1ace 
($var, 'bob1. 0) "<br>\n". echo substr_replace ($var. 
 'bob'. 0. strlen ($var)) "<br>\n"; 
// выводит: bob<br> 
/* вставить 'bob' в начале строки $var. */ 
echo substr_replace ($var. 'bob'. 0. 0) . 
"<br>\n": 
// выводит: bobABCDEFGH:/MNRPQR
/<br> 
//* замена 'MNRPQR' в $var на 'bob' */
 echo substr_replace ($var. 'bob'. 
10. -1) . "<br>\n". echo substr_rep1ace ($var. 'bob'. 
 -7. -1) . "<br>\n": // выводит:
 ABCDEFGH:/bob/<br> 
/* удаление 'MNRPQR' из $var. */ 
echo substr_replace ($var. ", 10. -1) .
 "<br>\n": 
// выводит: ABCDEFGH-//<br> 
C. 1 ?> 

См. также: str_replace() n substr().

Сложные манипуляции

addslashes

Добавление слешей перед специальными символами строки

string addslashes (string str) .

Возвращает строку, в которой перед символами, имеющими специальное значение для строк, вставляется слеш. Такими символами являются: одиночная (') и двойная (") кавычки, обратный слеш (\) и нулевой байт NUL (\0). Это часто требуется, чтобы затем правильно передать строку в запросе к базе данных и т. д.

См. также: stripslashes(), htmlspecialchars() и quotemeta().

addcslashes

Форматирование строки слешами в С-представление

string addcslashes (string str, string charlist)

Возвращает строку str, в которую вставлены символы обратного слеша «\» перед перечисленными в строке-списке charlist символами. Это позволяет преобразовать непечатные символы в их визуальное С-представлсние.

В примере, приведенном ниже управляющие символы: «\n>>, «\r», и другие с кодами ASCII до 32 и выше 126, а также знак восклицания и «собака», конвертируются в их специальное или восьмеричное представление. Будьте осторожны с алфавитно-цифровыми символами и кодами (например, символы кириллицы имеют коды выше 126). Строка charlist содержит диапазоны кодов в формате "\0..\37", что в данном случае означает: коды от 0 до 31.

$not_escaped = " Эта строка \t is (@) much complex \r to \x9f be \n presented! \n\n". echo $not_escaped. Sescaped = addcslashes ($not_escaped. "\0 .\37!@\177..\377"): echo Sescaped;

При запуске сценарий выводит следующее:

Эта строка is (@) much complex to Я be presented1 \235\342\240 \341\342\340\256\252\240 \t is (\@) much \r\n complex \r to \237 be \n presented\!\n

См. также: stripcslashes(), stripslashes(), html special chars(), htralspe-cialchars() и quotemeta().

stripslashes

Удаление обратных слешей

string stripslashes (string str)

Возвращает строку, из которой удалены обратные слеши. Двойные слеши делаются одиночными.

См. также addslashes().

stripcslashes

Преобразование специальных символов в их двоичное представление string stripcslashes (string str)

Возвращает строку, в которой те специальные символы, которые закомментированы (для визуального отображения) обратным слешем, преобразуются в их естественное двоичное представление. Распознаются С-подобные записи, например: \n, \r ..., восьмеричные и шсст-надцатеричные последовательности.

См. также addcslashes().

quotemeta

Цитирование метасимволов string quotemeta (string str)

Возвращает строку str, в которую добавлены обратные слеши «\» перед каждым из следующих символов:

\\ + *?["]($)

Может использоваться для подготовки шаблонов в регулярных выражениях.

См. также: addslashes(), htmlentities(), htmlspecialchars(), nl2br() и stripslashes().

wordwrap

Расстановка переносов строк по ширине

string wordwrap (string str [, int width [. string break [, int cut]]])

Возвращает строку str, в которой расставлены символы перехода на новую строку («\п» или тот, который указан аргументом break), таким образом, что число символов на строке не превышает значения width (по умолчанию оно равно 75). Перенос осуществляется по словам; если указывается параметр cut, равный 1, то перенос строки выполняется всегда, как бы длинно слово ни было.

$text = "The quick brown fox jumped over the lazy dog "; Snewtext = wordwrapf Stext. 20 ); echo "$newtext\n";

Будет выведено

The quick brown fox jumped 
over the lazy dog. 

Следующий пример демонстрирует использование последнего аргумента cut=l:

Stext = "A very long woooooooooooord ".
 Snewtext = wordwrap! 
 $text. 8. "\n". 1). echo "$newtext\n": 

Будет выведено

 A very long 

wooooooo ooooord

См. также: nl2br(), chunk_split().

convert_cyr_string

Конвертация строк из одной кодировки кириллицы в другую

string convert_cyr_string (string str, string from, string to)

Аргументы from и to — одиночные символы, представляющие соответственно исходную и целевую кодировки. Поддерживаемые типы кодировок, используемые в аргументах from и to:

  • k — koi8-r;
  • w — windows-1251;
  • i — iso8859-5;
  • a — x-cp866;
  • d — x-cp866;
  • m — x-mac-cyrillic.

hebrev

Конвертация логического текста Hebrew в отображаемый

string hebrev (string hebrew_text [, int max_chars_per_line])

Необязательный аргумент max_chars_per_line указывает число символов на строку вывода. Функция пытается избежать разрыва слов.

См. также hebrevc().

hebrevc

Аналог функции hebrev с расстановкой переносов

string hebrevc (string hebrew_text [, int max_chars_per_"hne])

Функция сходна с hebrev() с тем отличием, что она преобразует символы перевода строк «\п» в «<br>\n». Необязательный аргумент тах_ chars_per_line указывает число символов на строку вывода. Функция пытается избежать разрыва слов.

См. также hebrev().

quoted printable decode

Преобразование цитированной строки в 8-битную

string quoted_printable_decode (string str)

Функция сходна с imap_qprint(), но не требует модуля ШАР.

Функции URL

parse_url

Разделение строки URL на ее компоненты

array parse_ur! (string url)

Возвращает ассоциативный массив, содержащий различные присутствующие в URL компоненты. Такими компонентами могут быть: «scheme», «host», «port», «user», «pass», «path», «query» и «fragment».

parse_str

Занесение строки URL в переменные

void parse_str (string str [, array arr])

Интерпретирует строку str, как если бы эта строка содержала переменные и их значения и передавалась в URL; устанавливает для найденных переменных значения. Если указывается второй аргумент, то значения сохраняются не в глобальных переменных, а в элементах указанного массива.

$str = "first=val33&second[]=
trns+works&second[]=another" 
parse_str($str). 
 parse_str($str.$ar). 
echo Sfirst: /* выводит "va!33" */ 
echo $secona[0]. 
/* выводит "this works" */ 
echo $second[l]. /
* выводит "another" */ 
print_r($ar): 
 * выводит: 
[first] => va!33 [second] =>
 Array ( [0] => this works [1] => 
another ) */ 

rawurlencode

Кодирование URL

string rawurlencode (string str)

Возвращает строку, в которой вес не алфавитно-цифровые символы (за исключением дефиса «-», знака подчеркивания «_» и точки «.») заменены последовательностями: знак процента (%), за которым следуют две шестнадцатеричпыс цифры (обозначающие код символа). Схема этого кодирования описана в файле RFC1738, и она предназначена для того, чтобы буквенные символы не обрабатывались в качестве разделителей строки URL и не искажались при передаче в сетях (что характерно для некоторых систем электронных сообщений).

echo '<A HREF="ftp://user: ' . rawurlencode (Smypasswd). '@ftp.my.com/x.txt">' . // передача пароля в гиперссылке

Или при передаче нестандартной для URL строки пути:

echo '<A HREFz"http://x 
com/department_list_sc'"ipt/' .
rawurlencode ('sales и
 marketing/Miami '). '">': 

См. также: rawurldecode(), urldecode(), urlencode().

rawurldecode

Декодирование URL

string rawurldecode (string str)

Возвращает строку, в которой последовательности со знаком процента «%» с последующими двумя шестнадцатеричными цифрами заменяются соответствующими данному коду символами. Например, строка:

fool20bart40baz

преобразуется в

 foo bargbaz 

См. также: rawurlencode(), urldecode(), urlencode().

urlencode

Кодирование строки в URL

string urlencode (string str)

Возвращает строку, в которой все не алфавитно-цифровые символы (за исключением дефиса «-», знака подчеркивания «_» и точки «.») заменены последовательностями: знак процента (%), за которым следуют две шестнадцатеричные цифры (обозначающие код символа), а символ пробела заменен на знак «+». Именно таким образом кодируются все данные, посылаемые HTML-формами. Медиа-тип этого кодирования обозначается как application/x-www-form-urlencoded; он отличается от стандарта кодирования RFC 1738 (ем. функцию rawur-lencode()) тем, что, по историческим причинам, пробелы заменяются па знак плюс. Эта функция удобна при кодировании строки для использования в строке запроса, являющейся частью URL, и при передаче переменных на следующую страницу:

echo '<А HREF="mycgi?foo=', urlencode (Susennput). '">': РОЮ ra-yurl encode С foo М/ЯгЛ?&#'). // выводит f6o«20Z405!28 «25Z2R886«5CJ!3lrZ26Z23 echo urlencode ('foo @+l/»\\7&#'); // выводит foo+X40X2B3;25*2F*86*5a3F*26*23

Будьте осторожны с передачей переменных (в ссылках), которые могут совпасть с зарезервированными в HTML словами (например: Samp, Scopy и Spound — интерпретируются браузером и замещаются соответствующими символами).

См. также: urIdecode(), htmlentities(), rawurldecode(), rawurlencode().

urldecode

Декодирование строки из URL

string urldecode (string str)

Декодирует в строке последовательности %## (так в URL кодируются спецсимволы).

$а = split ('&'. Squerystnng): $i=0 while ($1 < count (la)) { $b - split (' = '. $a [ii i;. echo 'Value for parameter '. htmlspecialchars (urldecode ($b [0])). ' is '. htrnlspecialchars (urldecode ($b [I].)). "<BR>"; $1++; }

См. также: urlencode(), rawurlencode(), rawurldecode().

base64_encode

Кодирование строки в формат base64

string base64_encode (string data)

Возвращает закодированную метолом «base64» строку data. Это кодирование предназначено для того, чтобы передаваемые двоичные данные могли правильно (без искажений) передаваться системами, изменяющими 8-й бит, например при передаче двоичных данных в теле сообщении электронной почты. При этом кодировании размер данных увеличивается на треть.

См. также: base64_decode(), chunk_split"(), RFC2045.

base64_decode

Декодирование строки из формата base64

string base64_decode (string encoded data)

Декодирует закодированную строку encoded_data и возвращает оригинальные данные (они могут быть двоичными).

См. также: base64_encode(), RFC2045.

HTML-конвертации

nl2br

Форматирование HTML-переносов строк string nl2br (string string)

Возвращает строку, в которой перед каждым символом перевода строки (newline) «\n» вставляется последовательность <BR>.

См. также: htmlspecialchars(), htmlentities() и wordwrap().

strip_tags

Удаление из строки тегов

string strip_tags (string str [, string allowablejtags])

Возвращает строку str, из которой удалены все HTML- и PHP-теги. Незавершенные и фиктивные теги вызывают ошибку. Схема, по которой производится удаление тегов, такая же, как и в функции fgetss().

Можно использовать необязательный аргумент allowable_tags для указания того, какие теги не следует удалять.

get_meta_tags

Извлечение содержимого метатегов из файла в массив

array get_meta_tags (string filename [, int use_include_path])

Функция открывает файл filename и интерпретирует его построчно, находя теги <meta>:

<meta name="author" content="name"> <meta name="tags" content="php3 documentation'> </head> <!-- Здесь функция завершается -->

В возвращаемом массиве индексами становятся значения атрибута name, а самими значениями — значения атрибута content. Спецсимволы в значении атрибута name заменяются на знак подчеркивания «_», а алфавитные символы преобразуются в нижний регистр.

Если указывается необязательный аргумент use_include_path со значением 1, то при поиске файла будет использоваться не только текущий путь, но и путь включаемых файлов по умолчанию.

get_html_translation_table

Получение таблицы трансляции, используемой функциями htmlspecialchars() и htmlentities()

string get_html_translation_table (int table [, int quote_style])

В аргументе table указывается, какую таблицу трансляции необходимо получить: HTML_SPECIALCHARS (для функции htmlspecialchars()) или HTML_ENTITIES (для функции htmlentities()). Можно также указать необязательный аргумент quote_style (no умолчанию — ЕМТ_СОМРАТ), его описание приведено в функции htmlspecialchars().

$trans get_html_translation_table (HTMLJNTITIES): $str = "< A & В >". Sencoded = strtr ($str. Strans), // теперь Sencoded = "&lt; A &amp; В &gt."

Иногда удобно использовать функцию array_f!ip() для изменения направления трансляции.

Strans = array_flip (Strans): Sorlginal = strtr (Sencoded. Strans):

См. также: htmlspecialchars(), htmlentities(), strtr() и array_flip().

htmlspecialchars

Конвертация спецсимволов в HTML-представление

string htmlspecialchars (string string [, int quote_style])

Некоторые символы имеют специальное значение в HTML, и поэтому для использования в тексте их необходимо заменять эквивалентами. Функция производит следующие замены:

  • & (амперсант) становится &атр;
  • " (двойная кавычка) становится &quot; при quote_style <> ENT_ NOQUOTES;
  • ' (одиночная кавычка) становится &#039; при quote_style = ENT_ QUOTES;
  • < (знак меньше) становится &lt;
  • > (знак больше) становится &gt;
 $new = htmlspeciaichars("<a href='test'>Test</a>". ENT_QUOTES). 

Функция удобна для предотвращения неправильного вывода текста, введенного пользователем, если он содержит элементы форматирования HTML (например, в досках объявлений, гостевых книгах, чатах). Необязательный аргумент quote_style указывает, как поступать с кавычками: режим по умолчанию ЕМТ_СОМРАТ, служащий для обратной совместимости, разрешает трансляцию только двойных кавычек; ENT_QUOTES разрешает трансляцию любых кавычек; a ENT_NOQUOTES запрещает трансляцию любых кавычек.

Такую же операцию производит функция htmlentities().

См. также: html entities ()и nl2br().

htmlentities

Конвертация символов, имеющих HTML-представление

string htmlentities (string string [, int quote_style])

Функция подобна htmlspecialchars() с тем отличием, что она производит не выборочную трансляцию, а полную — для всех символов, которые могут иметь эквивалентные HTML-представления. Необязательный аргумент quote_style указывает, как поступать с кавычками: режим по умолчанию ENT_COMPAT, служащий для обратной совместимости, разрешает трансляцию только двойных кавычек; ENT_ QUOTES разрешает трансляцию любых кавычек; a ENT_NOQUOTES запрещает трансляцию любых кавычек. В настоящее время используется кодировка ISO-8859-1.

См. также: htmlspecialchars() и nl!2br().

Синтаксис регулярных выражений (PCRE )

Способность работать с регулярными выражениями РНР наследовал от языка Perl. Поэтому синтаксис регулярных выражений почти полностью напоминает Perl, только используются они не как языковые конструкции, а как аргументы в функциях PCRE. Некоторые отличия (расширения) от Perl все же существуют.

Регулярное выражение должно состоять из: ограничителей шаблона, самого шаблона и необязательных модификаторов.

/шаблон/модификаторы

Ограничителями могут служить: прямые слеши «/», а также любые не алфавитно-цифровые символы, кроме обратного слеша «\». Часто в качестве ограничителей служат символы: \, %, $. Завершающий ограничитель должен быть представлен тем же символом, что и начинающий; ограничитель должен быть первым символом регулярного выражения. Если необходимо использовать символ, выбранный ограничителем в шаблоне, ему должен предшествовать обратный слеш «\» (например: «/\d{l,2}V\d{2}/»).

Заметьте, что перед тем, как значение строки шаблона будет передано в функцию, РПР интерпретирует строку регулярного выражения как любую другую строку. Поэтому будьте осторожны с использованием метасимволов и внимательно используйте обратный слеш. Например:

Sbegin = "OOps"; Spattern = "/Sbegnn/".

Теперь шаблон Spattern будет искать последовательность Oops в любом месте текста вместо ожидаемого фрагмента begin в начале текста. В данном случае строку следует записывать как Spattern = "ASbegin/"; либо как: Spattern = '/$begin/':. Подобных примеров можно привести множество, поэтому не брезгуйте заглянуть в раздел «Типы: Строки», чтобы вспомнить, как РНР интерпретирует строки, и, в частности, как следует использовать слеши.

Синтаксис шаблона

Символы в шаблоне делятся на два вида: обозначающие самих себя и метасимволы, имеющие специальное значение в регулярных выражениях. Именно в использовании метасимволов заключается вся мощь использования регулярных выражений.

Метасимвол

Значение

\

подстановка;

.

любой символ: [*\n] или [\0-\xFF];

I

альтернатива;

0

ограничители подшаблона;

|]

ограничители класса символов;

{}

числители повторения «от X до У раз»;

?

числитель «1 или 0 раз»; или мишшизатор числителя; или расширение значения метасимвола «(»;

*

числитель «0 или более pa:i>>;

+

числитель «1 или более раз»;

<

претензия «в начале строки»;

$

претензия «в конце строки».

В классах символов метасимволом является знак диапазона «минус» (-), а метасимвол инвертирует класс методом «все символы, кроме указанных».

Обычно пробелы в шаблоне рассматриваются как значащие. При установке же модификатора х все пробелы в шаблоне и все символы от знака # и до конца строки воспринимаются как комментирующие. Тем не менее, в классах символов пробел и знак # всегда являются значащими. В маркерах специальных подшаблонов не допускается использование пробелов, так как тогда нарушается смысл маркеров (сравните: (?<= ххх) и (? < = ххх)).

Например, шаблон (неплохой пример, хотя он и неадекватно работает с одинаковыми вложенными тегами):

'% < ([*> ]+) (['>]*) > # открывающий тег (и атрибуты тега) (.*) # содержимое тега < / \1 > # закрывающий тег £xis'

эквивалентен шаблону:

'*<(Г> ]+)(Г>]*)>(.*Н?#содержимое Tera)</\l>*is'

Далее рассматриваются способы использования метасимволов.

Подстановки

Символ (\) помимо операций подстановки, рассмотренных ниже, используется для превращении метасимволов в обычные. Например, для того, чтобы использовать точку в шаблоне как «точку», а не как «оператор подстановки любого символа», перед ней следует ставить слеш (\). Так же желательно поступать со всеми спецсимволами (то есть не являющимися буквенно-цифровыми), даже если они и не являются метасимволами. (При установленном модификаторе х слешем также следует предварять пробел и символ #, если только они не обозначают комментарий.)

Подстановки, обозначаемые символом обратного слеша (\), бывают пяти видов.

1. Подстановка непечатного символа.

Вместо следующих последовательностей вставляется:

  • \а - символ BEL (07 в ASCII);
  • \е — символ escape (hex IB в ASCII);
  • \f — символ прогонки страницы formfeed (hex ОС в ASCII);
  • \n — символ перевода строки newline (hex OA в ASCII);
  • \г — символ возврата каретки (hex OD в ASCII);
  • \t — символ табуляции (hex 09 в ASCII);
  • \сх — символ «Control-X», где х — любой буквенный символ.

Фактическое же действие последовательности \сх следующее: если «х» в нижнем регистре, он преобразуется в верхний, затем бит 6 (hex 40) этого символа инвертируется. Таким образом «\cz» становится шестнадцагеричным 1А, а «\с{»становится \хЗВ, тогда как «\с;» становится \х7В.

2. Подстановка символа с указанным кодом.

Для подстановок этого вида используются две записи:

  • \хшш, где шш — одна или две шестнадцатиричных цифры, буквы можно указывать в верхнем или нижнем регистре;
  • \ДДД, где ДДД — одна-три восьмеричных цифры.

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

3. Подстановка фрагмента совпадения с подшаблоном (обратная ссылка).

Указываются в виде: \ДД, где ДД — одна-две десятичных цифры (1-99) без незначащих нулей. Таким образом, обратных ссылок не может быть более 99. См. подробную информацию в разделе «Подшаблоны».

4. Подстановка класса символов.

  • \d — любой цифровой символ, [0-9];
  • \0 — любой НЕцифровой символ, [*0-9];
  • \s — любой пробельный символ, [\t\ \r\f\n];
  • \S — любой НЕпробелышй символ;
  • \w — любой алфавитно-цифровой символ;
  • \W — любой НЕалфавитно-цифровой символ.

Алфавитно-цифровым символом считается буква, цифра или знак подчеркивания, также в этот набор могут входить локальные буквенные символы (например, символы кириллицы), и это определяется символьными таблицами PCRE.

Эти подстановки можно включать в класс символов.

5. Обозначение общего вида претензий.

  • \b — «на границе слова»;
  • \В — «не на границе слова»;
  • \А — в начале текста;
  • \Z — в конце текста или перед символом перевода строки;
  • \z — в конце текста.

Последовательности \А, \Z и \z, в отличие от метасимволов $ и А, действуют вне зависимости от режима многострочности (см. модификатор т).

Эти последовательности не должны использоваться в классах символов.

См. также раздел «Претензии».

Если после слеша указывается буква и эта последовательность не имеет специального значения подстановки, обычно слеш игнорируется и последовательность воспринимается как обычная буква. При установке же модификатора X такая последовательность вызывает ошибку. Это сделано для того, чтобы в дальнейшем, если когда-то такая последовательность приобретет специальное значение, она не использовалась бы неумышленно.

Альтернативы и классы символов

Допустим, в тексте нужно найти слово: «АА», «Бб» или «ВвВ», тогда в шаблоне следует указать 'АА|Бб|ВвВ', используя как обозначение альтернативы знак |, Допустимо любое число альтернатив и пустая альтернатива (соответствующая пустому фрагменту). Перебор альтернатив производится слева направо, и используется первая подходящая.

Для удобства можно заключать список альтернатив в скобки (то есть образовывать, таким образом, подшаблон), и в дальнейшем ссылать-ся на найденную альтернативу с помощью обратной ссылки. Например, шаблон: '*<(Н1|Н2|НЗ)>( .*)</\\l>*imUs' будет искать содержимое тегов заголовков.

Иногда необходимо искать символ, который может принимать различные значения, тогда используется класс символов, обозначаемый символами «[» и «]». Чтобы использовать символ ] в классе символов в качестве «самого себя», следует ставить перед ним слеш: \].

Если первый символ класса «А», то это означает: «любой символ, кроме тех, которые указаны в классе». Символ минус обозначает (если он не является первым или последним символом класса) символьный диапазон. Например, класс [лО-9] соответствует любому нецифровому символу (также можно записать как [А\хЗО-\х39]). Любую английскую букву можно указать как [a-z] |[A-Z]'. Если необходимо включить в класс символы «А» и «-», то первый не должен быть первым символом класса, а второй должен стоять в начале или конце класса.

В классе символов или вместо них допускается использование подстановок: \d, \D, \s, \S, \w. \W. Например, можно использовать последовательность \D вместо [лО-9]; или [\da-fA-F] для указания «любой шсстнадцатеричной цифры».

Класс символов в отличие от альтернатив сопоставляется только одному символу! Для того чтобы найти несколько символов из класса, используйте числители.

Прочие метасимволы (например, «$» или «}») в классе метасимволами не являются, но все же их желательно предварять слешем.

Особое значение имеет метасимвол «точка» (вне класса символов). Фактически он эквивалентен классу [*/n], представляющему собой совпадение с любым символом (включая также непечатные). Но, по умолчанию, если не используется модификатор s, ему не может соответствовать символ перехода на новую строку (\n); при указании же модификатора s точка соответствует абсолютно любому символу (то есть классу [\0-\xFF]).

Повторения и числители

Предположим, вы хотите найти в тексте номер, состоящий из 3-5 десятичных цифр, тогда в шаблоне необходимо указать \d{3,5}. Как вы можете догадаться, повторения символа (или, возможно, подшаб-лона) обозначаются указанием после него чисел в фигурных скобках, где первое число — минимально допустимое повторение символа (подшаблона), а после запятой — максимальное. Числители могут представляться также в следующем виде:

  • {n} — повторение, указанное n число раз;
  • {n,} — повторение, не меньше чем n раз.

Пропуск числителя до запятой не допускается. Первый числитель должен быть меньше второго. Вместо распространенных числителей можно также указывать их заменители:

Заменитель числителя

Значение

Эквивалент

у

« 1 или 0 раз»

{0,1}

*

«0 или более раз»

{0,}

+

«1 или более раз»

1.}

Будьте осторожны с неопределенными числителями, чтобы не спровоцировать бесконечный цикл.

При конструировании шаблонов с диапазонными повторениями необходимо учитывать такой фактор, как жадность числителей, то есть такой случай, когда шаблону может соответствовать как меньшее, так и большее число повторений. Положим, у нас имеется текст:

<Р> Текст <Р> абзаца</Р> со вложениями </Р>

Тогда шаблон /<p>(.*)<\/p>/i может (теоретически) вернуть 4 варианта совпадения. По умолчанию ищется максимальное повторение (то есть в данном варианте — строка целиком). Чтобы находилось минимально повторяющееся значение, используйте модификатор U. Для снижения «жадности» не всех числителей а только избранных ставьте после них знак вопроса, например: /<p>(.*?)<\/p>/i; этот способ изменяет «жадность» числителя на противоположную от основной.

Числитель может указываться не только после символа, класса, под-шаблона, но и после обратной ссылки.

Подшаблоны и обратные ссылки

Сами по себе подшаблоны (части шаблона, заключенные в круглые скобки) не влияют на функционирование регулярных выражений и могут служить исключительно для удобства группировки (они могут быть вложенными). Подшаблон может использоваться для ограничения набора альтернатив. При использовании же с обратными ссылками подшаблоны являются действенным инструментом поиска. Например, для поиска содержимого парных тегов может использоваться запись: *<([*>]*)>(.*)</\\1>*.

Подшаблоны нумеруются но порядку открывающей круглой скобки, и для доступа к фрагменту текста, совпадающему с подшаблоном, используются обратные ссылки формата: слеш, за которым следует число, большее 0 и меньшее 100, указывающее, к какому подшаблону ссылка относится (первой цифрой числа не должен быть ноль).

Заметьте, вместо ссылки подставляется фрагмент реального текста; например, регулярное выражение /слов(о|а) и числ\1/ будет подходить фразе: «слово и число» и «слова и числа», но не «слова и число»; а регулярное выражение /(A+)6\l/i не будет подходить строке «Аба», хотя и указано игнорирование регистра.

Ссылка может быть использована тогла и в том месте шаблона, когда ей уже можно будет однозначно сопоставить фрагмент текста. Например, конструкции (а\1) и (а|(b+))\2 неправильны.

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

(.*), (.)*, ([abc]*), ([abc])* (\2|\1+), (\2|\1)+.

Когда на подшаблон не имеется ссылок, его можно пометить указанием после открывающей скобки последовательности ?:, это исключает подшаблон из списка ссылок. Например, регулярное выражение /a((b+)(?:c*))(d?)/ будет иметь три ссылки: 1 -- на подшаблон ((b+)(?:с*)), 2 — на (b+) и 3 —.на (d?). Это может использоваться для увеличения общего числа подшаблонов до 200 (99 со ссылками и 101 без них). В такой форме записи становится возможным указывать внутренние модификаторы между ? и :, например: (?i:c|e|) эквивалентно (?:(?i)c|e|).

При необходимости указания внутри шаблона комментария (и возможном нежелании использовать модификатор х) допустимо исполь-

зовать подшаблоны комментариев (?#мой комментарий), игнорируемые при обработке.

Претензии

«Претензии» (assertions) представляют собой дополнительные проверки символов, окружающих место совпадения фрагмента с той позицией шаблона, в которой указана претензия.

Простейшие из них " и $ обозначают, что фрагмент должен находиться соответственно в начале или в конце текста. Так, шаблон /*А/ указывает на то, что ищется символ «А» в начале текста, а шаблон /Z$/ на то, что ищется символ «Z» в конце текста. Как видно из примеров, сами символы л и $, должны находиться соответственно в начале или конце шаблона. Шаблон /привет$/ будет проверять, состоит ли текст целиком из слова «привет».

У этих претензий есть одна особенность: что считать началом и концом текста (строки)? Установка модификатора m указывает на то, что конец и начало строки могут обозначаться символом (\п). Например, шаблон /~А/т ищет букву «А» либо в начале текста, либо после каждого символа (\п). При установленном модификаторе D знак $ обозначает исключительно фактический конец текста, иначе же (если указан модификатор т) он также может обозначать конец строки, то есть то, что непосредственно после фрагмента должен следовать символ перевода строки (\п). В отличие от модификатора D, влияющего только на претензию конца строки, модификатор m влияет на обе. Если текст не содержит символов перевода строки, эти модификаторы не имеют значения.

Следующими претензиями, аналогичными описанным выше, являются подстановки \А, \Z, \z, обозначающие соответственно фактическое начало текста, конец текста или перевод строки, и фактический конец текста. Эти претензии не зависят от модификаторов. Например, шаблон /\A.*T\Z.+\z/ra будет искать символ «Т» в конце строки, но не текста.

Дополнительными похожими претензиями являются подстановки \b и \В, обозначающие соответственно «на» и «не на» границе «слова». Словом считается последовательность, ограниченная пробельными символами (включая переводы строк) или началом или концом текста. А границей — промежуток между двумя символами, один из которых пробельный, а другой нет. Например, шаблон /\bпре(\^)ый\b/ ищет все слова, имеющие приставку «пре-» и окончание «-ый».

Более сложные виды претензий указываются в виде подшаблонов, и они дополнительно проверяют фрагмент текста до или после точки совпадения:

  • (?=текст) — текст после точки совпадения должен соответствовать указанному;
  • (?!текст) — текст после точки совпадения не должен соответствовать указанному;
  • (?<=текст) — текст до точки совпадения должен соответствовать указанному;
  • (?<!текст) — текст до точки совпадения не должен соответствовать указанному.

Их отличие от простого указания последовательностей в подшабло-не в том, что фрагмент совпадения с такой претензией не возвращается в результате. Например, шаблон /(?<=\()\w+(?=\))/ возвращает всякое слово, стоящее в скобках без пробелов, но сами скобки не возвращаются.

В претензиях возможно указывать альтернативы и все то, что может использоваться в обычных шаблонах, кроме повторений. Для претензий предшествия альтернативы не должны иметь неопределенную длину, например, следующая претензия допустима: (?<lа[bс), в то время как недопустимы: (?<!а(а be)) и (?<lа?|bс).

Допустимо использовать последовательности претензий, например (?<=\d{3}) (?<!000)\w соответствует слову, которому предшествуют три цифры, не являющиеся одновременно нулями. Таким образом, можно производить многочисленные проверки одного места совпадения.

Также возможны вложения, например (?<=(?<!вв)ББ)аа будет соответствовать фрагменту «ББаа», но не «ввББаа». На подшаблоны претензий ссылки не указываются.

Специальные структуры подшаблонов

Присутствие в шаблоне множества неопределенных числителей усложняет обработку регулярных выражений (в особенности, когда обрабатываемый текст велик) и увеличивает время обработки. Указание модификаторов «жадности» не позволяет избавиться от этого, так как все равно перебираются все возможные комбинации повторений, прежде чем возвратится результат обработки.

Поэтому в подшаблонах возможно использовать последовательности, блокирующие дальнейший перебор повторений подшаблона после того, как уже было найдено первое соответствие фрагменту текста. Такие подшаблоны маркируются последовательностью после открывающей скобки. Модификаторы «жадности» сохраняют при этом свое значение. Иными словами, вместо того, чтобы семь раз отмерять, мы сразу нарезаем строку на фрагменты.

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

Допустим, необходимо определить, оканчивается ли длинный текст на символы «Хх». При обычном шаблоне /Хх$/ проверка будет проходить от начала текста (сначала будет искаться символ, а потом определяться, стоит ли он в конце). Если усложнить шаблон до Г(. .*)Хх$/, это не сильно ускорит обработку, так как большую часть времени будет перебираться повторение первого подшаблона, и только потом определяться окончание текста. Если же написать шаблон как: /А(?>.*)(?<=Хх}$/, то первый подшаблон сразу же захватит весь текст целиком, а затем будет проверено окончание.

Последней замечательной особенностью регулярных выражении являются условные структуры, позволяющие выбирать подходящий под-шаблон в зависимости от результатов поиска. Они записываются так:

(? (условие) подшаблон!) или (?(условие)подшаблон1|подшаблон2).

При выполнении условия используется первый подшаблон, в противном случае (если он указан) — второй. Условия бывают двух типов.

Если условием является числовая последовательность, то условие верно при нахождении подшаблона с указанным номером, то есть когда существует непустая ссылка с таким номером. Например, следующий шаблон разделяет текст со скобками (невложенными):

/ ( ( \( )? # необязательная открывающая скобка ( [*()]+ ) # все. кроме скобок С?(2) \) )# если была открывающая скобка, должна быть закрывающая )+ I повторим? /х

Если условие нечисловое, то это должна быть сложная претензия. Например, следующий шаблон ищет десятичное число либо шест-надцатеричное (с префиксом х):

/ (?(?=х) # если префикс х [\da-fA-F]+ # то шестнадцатеричное число Синтаксис регулярных выражений (PCRE) I \d+ # иначе - десятичное ) /x

Модификаторы

Функционирование регулярных выражений можно видоизменять модификаторами трех уровней: глобальными, внешними и внутренними.

Модификатор

Внутреннее имя

Воздействие

i

PCRE_CASELESS

Игнорировать регистр

S

PCRE_DOTALL

Точка = [\0-\xFF], а не [А\п]

и

PCRE_UNGREEDY

Минимизировать числитель

га

PCRE_MULTILINE

А, $ учитывают \п

D

PCRE_DOLLAR_ENDONLY

$ не учитывает \п

А

PCRE_ ANCHORED

Привязать шаблон к началу текста

е

 

Только для preg_rep!ace()

X

PCRE_EXTENDED

Разрешить комментарии: пробел и #

X

PCRE_EXTRA

Воспринимать неверную подстановку как ошибку

S

 

Предварительная оптимизация шаблона перед исполнением

Значение модификаторов и их использование описаны в соответствующих разделах.

Модификатор га обладает большим приоритетом, чем 0. Модификатор А предназначен для ускорения обработки, но более выгодно явное конструирование оптимизированных шаблонов, например /.*шаблон/з для однострочного текста.

Внешние модификаторы (указываемые после завершающего ограничителя) воздействуют на весь шаблон и нейтрализуют установленные по умолчанию йа глобальном уровне (при компиляции PCRE).

Модификаторы i, m, s, x, U, X можно устанавливать внутри шаблона, внутри подшаблона модификаторов (? ... ), после знака вопроса. Если в таком подшаблоне присутствует знак «минус», то модификаторы, стоящие за ним, сбрасываются. Действие таких модификаторов распространяется на промежуток шаблона от места его указания до его следующего возможного указания (со знаком минус) или до конца шаблона. Например: /аб(?51)вгде(?х-1т)ж(?тт: .*)з/га. При указании внутренних модификаторов внутри подшаблона их действие (в отличие от Perl) распространяется только на этот подшаблон. Например, шаблон /(а(?1)б)в/ соответствует только фрагментам «абв» и «аБв», а шаблон /(а(?1)б|г)/ соответствует фрагментам: «аб», «аБ», «г» или «Г».

Функции регулярных выражений (PCRE)

pregjnatch

Одиночный регулярный поиск

int pregjnatch (string pattern, string subject [, array matches])

Ищет в тексте, указанном аргументом subject, соответствие шаблону, указанному в pattern. Если совпадение находится, то функция возвращает TRUE, в противном случае — FALSE.

При указании в аргументе matches массива (одномерного) он заполняется найденными фрагментами совпадения. $matches[0] будет содержать фрагмент, совпадающий с полным шаблоном, $matches[l] -совпадение с первым подшаблоном и т. д.

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

if (pregjnatch ("/XX/i". "уу Хх хухх")) { // игнорировать регистр print "Найдено" } else { rint "Безуспешный поиск". if (preg_match C7\bxx\b/i" . "уу Хх лухх")) // искать слово '<хх» print "Найдено": else print "Безуспешный поиск"; preg_match("r(http "http-//www php.net/index.html", Smatches): $host = $matches[2]: //должно содержать: www.php.net // найти имена двух последних доменов сервера preg_match("/r\.\/]-t-\.r\.\/]+$/".$host.$matches): echo "domain name is: ".$matches[0]."\n": // напечатает domain nane is php net

См. также: pregjnatcrall(), preg_replace(), preg_split().

preg_match_all

Полный регулярный поиск

int preg_match_all (string pattern, string subject, array matches [, int order])

Ищет в тексте, указанном аргументом subject, все возможные соответствия шаблону, указанному в pattern. Поиск последующих совпадений производится от места последнего совпадения. Функция возвращает число совпадений с полным шаблоном или FALSE, если совпадений не было (или произошла ошибка).

В аргументе matches указывается массив (двухмерный), который заполняется найденными фрагментами совпадения. Аргумент order определяет вид, в котором сохраняются результаты поиска в массиве matches, и может принимать два значения.

PREG_PATTERN_ORDER (по умолчанию) - в виде [(под)шаб-лон] [фрагмент]. В (под)массиве Smatches[0] сохраняются совпадения с полным шаблоном, в $matches[l] и последующих — совпадения с подшаблонами.

     
      
 preg_match__all ("|<[A>]+>( .*)</[*>]+>|U". 
"<b>Пример: </b> <div aliqn=left> мой текст 
</div>", 
 Jout. PREG_PATTERN_ORDER): 

Теперь массив Sout будет содержать следующие элементы (общая схема):

   

Фрагменты

   
   

0

1

...

Шаблон

0

$out[0]|0] = "<b>Пример: </b>"

$out[0][l] = "<cliv aligrHeft> мой T6KCT</div>"

$out[0)[...]

Под-шаблоны

1

$out[l][0] = "Пример: "

Sout[l][l] = " мой текст "

$out[l]L-..]

   

$out[...][0]

$out[...][l]

$out[...][...]

PREG_SET_ORDER — в виде [фрагмент] [(под)шаблон]. В (гюд)массивах $matches[0] — $matches[xxx] сохраняются соответствующие фрагменты совпадения.

 preg_match_all ("[<[*>]+>(.*)</[">]+>|U". 
"<b>Пример: </b> <div align-left* мой 
текст </div>", 
 $out. PREG SET ORDER): 
   

Шаблон

Подшаблоны

 
   

0

,

 

Фрагменты

0

$out[0][0] =•

"<b>Пример:

</b>"

$out[0][l] = "Пример: "

$out(0][...J

 

1

$out[l][0] -

"<div align=lefl> мой текст </div>"

$put[lj[l]-" мой текст "

$out[l]|...|

 

...

$out[...][0]

$out [...][!]

$out[...][...]

//Пример 1. 
Получение телефонного номера. 
preg_match_all t"/\(? 
(\d{3.6})? \)? 

(?(1) [\-\s] ) \d{3}-\d{4}/x". "Call 555-1212 or 1-800-555-1212", Sphones). // Пример 2. Искать парные HTML теги (жадно) // \\2 - ссылка, здесь на t[\wj+) Shtml = "<b>bold text</b>--a href=howdy.htrol>click me</a> preg_match_dll ("/(<([\w]+)[*>]*>K.*)(<\/\\2>)/". Shtnl. Sratches); for ($i=0. $i< count($inatches[0]). $i++) { echo "фрагмент: " $matches[0][$i] "\n". "часть 1 " $matches[l][$i] "\n". "часть 2: ".$matches[3][$i]."\n". "часть 3: ".$matches[4][$i]."\n\n". }
После запуска примера будет выведено:

 фрагмент: <b>bold text</b>
 часть 1 <b> 

часть 2: bold text часть 3: </b> фрагмент: <а href=howdy.html> click me<@060>/a> часть1: <а href=howdy.html> часть 2: click me часть 3 </а>

См. также: preg_match(), preg_replace(), preg_split().

preg_replace

Регулярный поиск с заменой

mixed preg_replace (mixed pattern, mixed replacement, mixed subject [, int limit])

Ищет в тексте subject вес фрагменты, соответствующие шаблону pattern, и заменяет их на replacement. Возвращает измененный текст. Если совпадений не находится, то возвращается неизмененный текст subject. Аргумент limit указывает, сколько фрагментов надо заменить; если он не указан или равен -1, то заменяются все найденные фрагменты.

replacement может содержать обратные ссылки (обычные для регулярных выражений) в форме \\п или, что более предпочтительно, в форме $п. Каждая такая ссылка будет заменяться на фрагмент исходного текста, соответствующий указанному подшаблону. Обычно n может быть от 0 до 99 и \\0 или $0 соответствует целому шаблону.

Каждый аргумент (кроме limit) может быть массивом. В простейшем случае к массиву с текстом применяются единые шаблон и замена (возвращается соответствующий массив). Возможно применение к одному тексту набора шаблонов и заместителей. Если в массиве replacement недостаточно элементов, то вместо них используются пустые строки; если аргумент replacement — строка, то она используется для всех элементов. Сходные комбинации возможны, но едва ли полезны.

Наиболее мощной возможностью функции является возможность использования в регулярном выражении pattern модификатора е. Это заставляет функцию обрабатывать текст замещения replacement как PHP-код (в котором также возможно использовать ссылки). Но не забывайте, что тогда код должен соответствовать всем синтаксическим правилам РНР, иначе будет спровоцирована ошибка.

//Пример 1 Spatterns = array ("/(19|20)(\d{2}) -(\d{1.2})-(\d{1.2})/". "r\s*{(\w+)}\s*=/"): $r-eplace = array ("\\3/\\4/\\l\\2". "$\U ="); print preg_replace (Spatterns, Sreplace. "{startDate} = 1984-5-27"); //напечатает: SstartDate = 5/27/1984 // Пример 2. «использование модификатора /е» // делает все HTML теги заглавными preg_replace ("/(<V)(\w+)([">]*>)/e". "\\Г .strtoupper('\\2') '\\3'", $html_body); // Пример 3. Преобразование HTML в текст // Sdocument должен содержать текст HTML. // Удаляются теги HTML tags, секции javascript // пробелы 8 начале строк. Подстановки HTML конвертируются // в их символьное представление. $search = array C"<scnpt[*>]*?> *? </scnpt»'sn". // Вырезать javascript "<[\Л!]*?[Ж<>]*?>'51". // Вырезать теги html "' ([\r\n])[\s]+'". // Вырезать начальные пробелы "'&(quot|#34);'т", // Заменить html entities "'&(amp||38).'V. '"&(lt|#60):'i". "'&(gt|#62): '-!". '"&(nbsp|#160):'i". '"Sdexcllfien.1!" . '"&(cent|fl62);'i". '"&(pound|#163);'i". '"&(copy|#169);'i". "'&#(\d+).'e"): // обработать php кодом Sreplace = array ("". "\\1", "\"". "&". 11 <" M>". chr(161). chr(162). chr(163). chr(169). "chr(\\l)"): Stext = preg_replace (Ssearch. Sreplace. Sdocument).

См. также: pregjnatch(), preg_match_all(), preg_split().

preg_split

Нарезка регулярным выражением

array preg_split (string pattern, string subject [,

int limit [, int flags]])

Возвращает массив, содержащий части текста subject, находящиеся между фрагментами, соответствующими шаблону pattern.

Аргументом limit можно указать число элементов в возвращаемом массиве.

При указании в аргументе flags значения PREG_SPLIT_NO_EMPTY в возвращаемом массиве не сохраняются пустые значения.

// Разделить текст пробельными символами или запятыми Skeywords = preg_split ("/[\s.]+/". "hypertext language, programming"); // разделить строку на составляющие символы $str = 'ноя string'; $chars = preg_split('//'. $str. 0. PREG_SPLIT_NO_FMPTY): print_r($chars):

См. также: preg_match(), pregjnatch_al 1 (), preg_replace().

preg_quote

Цитирование метасимволов регулярного выражения

string preg_quote (string str [, string delimiter])

Возвращает строку str, и которую вставлены слеши перед каждым символом, являющимся метасимволом в регулярных выражениях. Это бывает полезно, когда во время исполнения необходимо создать шаблон для поиска в тексте фрагмента, который может содержать специальные символы.

Метасимволами регулярных выражений считаются: .Л\ + *?[*]$(){}-! <> .| :

В аргументе delimiter можно указать перечисление дополнительных символов, которые следует предварять слешем (обычно здесь полезно указать ограничитель шаблона).

Skeywords = "$40 за дЗ/400"; Skeywords = preg_quote (Skeywords. "/"); echo $keywords. // возвращает: \$40 for a g3\/400 // Выделение курсивом слова в тексте HTML, помеченного звездочками Stextbody = "Это *очснь* сложное выражение.". Sword = "*очень*": Stextbody •= preg_replace ("/(".preg_quote(Sword) ")/". "<-,>$1</1>". Stextbody);

preg_grep

фильтрация элементов массива в соответствии с шаблоном

array preg_grep (string pattern, array input)

Возвращает массив input, в котором оставлены только элементы, соответствующие указанному pattern шаблону.

// возвращает все элементы, содержащие
дробные числа $f1 array =
preg_grep ("/~(\d+)?\ \d+$/". $arra;y)

Расширение регулярных выражений POSIX

PHP использует расширение регулярных выражений POSIX, определенное спецификацией POSIX 1003.2. Эти регулярные выражения значительно уступают PCRE. Все эти функции принимают в качестве своего первого аргумента регулярное выражение (без ограничителей и модификаторов).

ereg <"'abc". $stnng).
/* Возвращает TRUE, если Istnng содержит
фрагмент "abc". */ егеУ ("*abc". Sstring);
/* Возвращает TRUE, если Sstring
начинается с "abc". */
ereg ("abc$". Sstring):
/* Возвращает TRUE, если Sstring
заканчивается на "abc" */
eregi ("(ozilla [23]JMSIE.3)".
$HTTP_USER_AGLNT); /* возвращает TRUE,
если браузер клиента
Netscape 2. 3 или MSIE 3. */
ereg ("([[.alnum:]]+) ([[.alnum ]]+)
([[ :alnum:]]+)". Sstring.Sregs).
/* Заносит три слова, разделенных
пробелами в $regs[l].
Sregs[2]и$regs[3].*/
$stnng = ereg_replace ("*". "<BR>". Sstring);
/* вставляет тег <BR> в начало строки
Sstring */ Jstring = ereg_replace
("$". "<BR>". Sstnng). /* вставляет тег
<BR> в конец строки Sstnng. */
Sstring •= ereg_replace ("\n". "". Sstnngj.
/* вырезает символы перехода на
новую строку в Sstring. */
Расширение регулярных выражений POSIX

ereg

Регулярный поиск

int ereg (string pattern, string string [, array regs])

Возвращает TRUE, если в строке string находится фрагмент, подходящий шаблону pattern, иначе — FALSE. В случае успеха массив regs заполняется совладениями с нодшаблонами. Элемент [0] массива regs содержит совпадение с полным шаблоном, а все последующие (1-9) — совпадения с подшаблонами. Массив regs всегда будет иметь 10 элементов, и это не зависит от числа подшаблонов.

Следующий пример печатает дату формата ISO (YYYY-MM-DD) в виде DD.MM.YYYY:

Sdate = "1982-11-29",
if (ereg
("([0-9]{4})-([0-9]{1.2})-([0-9]{1.2})",
$date. Sregs»
{ echo "$regs[3j.$regs[2].$regs[l]": } else f
echo "Дата в неправильной формате: $date". }

См. также: eregi(), ereg_replace(), eregi_replace().

eregi

Нечувствительный к регистру регулярный поиск

int eregi (string pattern, string string [, array regs])

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

См. также: ereg(), ereg_replace(). eregi_replace().

ereg_replace

Регулярная замена

string ereg_replace (string pattern, string replacement, string string)

В строке string ищутся фрагменты совпадения с pattern и возвращается строка string, в которой фрагменты совпадения (если таковые нашлись) заменены на replacement. Допускается использовать ссылки (0-9) на совпадения с подшаблонами. Ссылка \\0 означает совпадение с целым шаблоном.

tstring - "This is a test".
echo ereg_repl асе ("( )
is". '\\lwas". $st'~ing):

Однако если replacement содержит целочисленное значение, оно будет воспринято как код символа заместителя.

Jstrirg = "В строке четыре слова";
echo ereg_replасе('четыре', 4. Sstnng):
/* выводит: В строке слова */ echo ereg_replace
( 'четыре'. '4'. Sstnng):
/* выводит: В строке 4 слова */

См. также: ereg(), eregi(), eregi_replace().

eregi_replace

Нечувствительная к регистру регулярная замена

string eregi_replace (string pattern, string replacement, string string)

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

См. также: ereg(), eregi(), ereg_replace().

split

Нарезка в массив регулярным выражением

array split (string pattern, string string [, int limit])

Возвращает массив частей строки string, на которые она была разделена последовательностями, совпадающими с регулярным выражением pattern. В аргументе можно указать максимальное число частей, возвращаемое в массиве; если таких частей обнаружилось больше, последний элемент массива будет содержать оставшуюся неразделенной часть строки string. При ошибке возвращается FALSE.

// выделить четыре первых поля
строки файла /etc/passwd
$pasc,wd_list = split (":". $passwd_line. 5):

//разделить на переменные строку даты-времени
list ($month. $day. Syear, Shour. Srmnutes, Sseconds)
= split ('[/. -]'. "04/30/1973 14 23 88").

Заметьте, иногда проще использовать функцию explodeO. См. также: splitiO, explodeO, implodeO.

spliti

Нечувствительный к регистру аналог split()

array spliti (string pattern, string string [, int limit])

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

См. также: split(), explode(), implode().

sql_ regcase

Игнорирование регистра для SQL выражений

string sql_regcase (string string)

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

Например, это позволяет при указании в SQL выражениях игнорировать регистр строки поиска. Например, выражение: SELECT * FROM tbl WHERE fieldl='Abc' часто чувствительно к регистру, а его аналогия: SELECT * FROM tbl WHERE fieldl»1 [Aa][Bb][Cc]' - нет. Но для многих СУБД поиск и так нечувствителен к регистру, например: SELECT * FROM tbl WHERE fieldl LIKE 'Abc'

pcho sql_regcase ("Fv Жъ '");
//выводит: [Ff][Vv] [ВДГЪь] !

Функции работы с данными

страницы в данном разделе 
 Функции работы с данными   


Разделы
Околокомпьютерная литература (375)
Программирование (102)
Программы (75)
ОС и Сети (49)
Интернет (29)
Аппаратное обеспечение (16)
Базы данных (6)

Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)

PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C





 
©  programming-lang.com  справочник программиста