Справочник по PHP
О этом справочнике
Справочник предназначается для людей, уже освоивших азы программирования на языке PHP.
Справочник создан на основе информации, предоставленной на сайте «Справочник Web-языков» www.spravkaweb.ru.
В связи с тем, что данный ресурс постоянно пополняется новой информацией, скачать обновленную версию справочника можно из раздела Download
http://www.spravkaweb.ru/download.php?user=help_php
Дата выхода данной версии справочника: 06:40, 25 марта 2007.
Также на сайте доступны для скачивания справочники по CSS, Perl, MySQL.
Синтаксис языка и операторы
Выражения
if
Позволяет организовывать выполнение фрагментов кода по условию.
Синтаксис :
if (выражение) statement
Может иметь неограниченную степень вложенности в другие IF.
if($a > $b) print "$a больше $b";
<?php
if($a > $b) {
echo "$a больше $b;
$b=$a;
}
?>
else
Расширяет возможности IF по части обработки вариантов выражения, когда оно равно FALSE.
Выражение ELSE выполняется только если IF равно FALSE.
if($a>$b) {
echo "a больше b";
} else {
echo "a меньше b";
}
elseif
Является комбинацией IF и ELSE. Позволяет выполнить выражение, если значение IF равно FALSE, но в отличии от ELSE оно выполниться, если выражение ELSEIF равно TRUE.
if ($a > $b) {
echo "a больше b";
} elseif ($a == $b) {
echo "a равно b";
} else {
echo "a меньше b";
}
if ... endif
Один из возможных вариантов группирования операторов с оператором IF.
Удобно при внедрении больших блоков HTML-кода внутрь оператора IF.
if ($a == 1):
echo "a равно 1";
elseif ($a == 2):
echo "a равно 2";
else:
echo "а не равно 1 и 2";
endif;
<?php if ($a==5):?>A=5<?php endif;?>
Блок HTML-кода A=5 будет виден, если выполнется условие $a==5
while
Простейший тип цикла в PHP. Заставляет PHP выполнять вложенные операторы до тех пор, пока условие равно TRUE. Если условие равно FALSE с самого начала, то цикл не выполнится не разу.
Синтаксис:
WHILE(условие)выражения
Можно сгруппировать несколько операторов внутри фигурных скобок или использовать альтернативный синтаксис :WHILE(условие)выражения... ENDWHILE;
<?php
$a=1;
while ($a <= 5) {
echo $a++;
}
?>
<?php
$a = 1;
while($a <= 5):
echo $a;
$a++;
endwhile;
?>
- Эти два примера выводят номера с 1 до 5.
do_while
Цикл, аналогичный WHILE, но значение логического выражения проверяется не до, а после окончания итерации. Основное отличие - то что цикл хоть один раз но выполнится.
<?php
$a = 1;
do {
echo $a;
} while ($a > 1);
?>
Можно прекратить использовать блок операторов в середине путем внедрения оператора BREAK в цикл DO..WHILE(0) :
<?php
do {
if ($a == 5) {
echo "A равно 5"
break;
}
$a *= $b;
if ($a < $minimum) {
break;
}
echo "A равен $a";
} while(0);
?>
for
Наиболее мощный цикл в PHP.
Синтаксис:
FOR (условие1; условие2; условие3)выражения
(условие2 - Проверяется в начале каждой итерации. Если оно равно TRUE, то цикл продолжается и выполняются вложенные операторы. Если оно равно FALSE, то цикл заканчивается.(условие3 - Выполняется (вычисляется) в конце каждой итерации.
Каждое из этих условий может быть пустым.
Пример1:
for ($a = 1; $a <= 5; $a++) {
echo $a;
}
Пример 2:
for ($a = 1;;$a++) {
if ($a > 5) {
break;
}
echo $a;
}
Пример 3:
$a = 1;
for (;;) {
if ($a > 5) {
break;
}
print $a;
$a++;
}
Пример 4:
for ($a = 1; $a <= 5; print $a, $a++);
PHP поддерживает альтернативный синтаксис FOR:
FOR(усл1; уcл2; усл3;):операторы;...;ENDFOR;
break
Прерывает выполнение текущего цикла.
Пример:
$a = 0;
while ($a < 5) {
if ($arr[$a] == "stop") {
break;
}
$a++;
}
continue
Переходит на начало ближайшего цикла.
<?php
while (list($key,$value) = each($arr)) {
if ($key % 2) {
continue;
}
do_something_odd ($value);
}
?>
switch
Сравнивает переменную или выражение с различными значениями и выполняет различные фрагменты кода в зависимости от того, чему будет равно значение выражения.
<?php
switch ($a) {
case 0:
echo "A равно 0";
break;
case 1:
echo "A равно 1";
break;
case 2:
echo "A равно 2";
break;
default:
echo "A не равно 0, 1, 2";
}
?>
require
Заменяет себя содержимым указанного файла.
Пример:
require("include.inc");
Но его нельзя поместить внутрь цикла и ожидать, что он включит содержимое другого файла несколько раз в процессе каждой итерации. Для этого есть INCLUDE.
include
Вставляет и выполняет содержимое указанного файла.
<?php
$files = array ("first.inc", "second.inc", "third.inc");
for ($a = 0; $a < count($files); $a++) {
include($files[$a]);
}
?>
Так как INCLUDE() это специальный оператор, требуется заключать его в фигурные скобки при использовании внутри условного оператора.
<?php
if ($a < 5) {
include("file_1.inc");
} else {
include("file_2.inc");
}
?>
function
Объявление функции.
Внутри функции может быть любой верный код PHP, даже объявление другой функции или класса. Функции должны быть объявлены перед тем, как на них ссылаться.
<?php
function foo ($arg_1, $arg_2, ..., $arg_n) {
echo "Пример функции.";
return $retvalue;
}
?>
Возвращение результатов:
<?php
function my_sqrt ($num) {
return $num * $num;
}
echo my_sqrt(4); //выведет 16
?>
Множественные результаты не могут быть возвращены в качестве результата, но вы можете реализовать это путем возврата списка:
function foo() {
return array (0, 1, 2);
}
list ($zero, $one, $two) = foo();
Аргументы:
Информация может быть передана функции через список аргументов, которые являются разделенным запятыми списком переменных и/или констант.
Списки аргументов переменной длины не поддерживаются, но того же можно достичь, передавая массивы.
function takes_array($input) {
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
Передача по ссылке:
По умолчанию, аргументы функции передаются по значению. Для изменения аргументов в функции их надо передавать по ссылке.Для этого надо поставить амперсанд (&) перед именем аргумента в объявлении функции:
function foo( &$bar) {
$bar .= "и добавочная строка.";
}
$str = "Это строка, ";
foo($str);
echo $str; // выведет : "Это строка, и добавочная строка."
function foo($bar) {
$bar .= "и добавочная строка.";
}
$str = "Это строка, ";
foo($str);
echo $str; //выведет : "Это строка, "
foo(&$str);
echo $str; //выведет : "Это строка, и добавочная строка."
Значения по умолчанию:
Значение по умолчанию должно быть константой, а не переменной или членом класса.
function day ($type = "понедельник") {
echo "Сегодня $type.";
}
echo day(); //выведет : Сегодня понедельник.
echo day("вторник"); //выведет : Сегодня вторник.
Аргументы по умолчанию при описании должны находиться справо от остальных аргументов.
function day($day_num, $type = "понедельник") {
return "Сегодня $day_num - $type.";
}
old_function
Оператор OLD_FUNCTION позволяет вам определяить функцию используя синтаксис PHP/FI2 (за исключением того, что вы должны заменить "function" на "old_function").
Это свойство только для совместимости и должно использоваться лишь конверторами PHP/FI2 - PHP3. Описанные таким образом функции не могут быть вызваны из служебного кода PHP. Вы можете обойти это путем введения специальной функции в терминах PHP3, которая будет вызывать OLD_FUNCTION.
class
Набор переменных и функций, работающих с этими переменными.
<?php
class Cart {
var $items; // Количество вещей в корзине покупателя
// Добавить $num наименований типа $artnr в корзину
function add_item ($artnr, $num) {
$this->items[$artnr] += $num;
}
// Убрать $num наименований $artnr из корзины
function remove_item ($artnr, $num) {
if ($this->items[$artnr] > $num) {
$this->items[$artnr] -= $num;
return true;
} else {
return false;
}
}
}
?>
Классы это типы, то есть, заготовки для реальных переменных. Вы должны создавать переменные желаемого типа, используя оператор new:
$cart = new Cart;
$cart->add_item("10", 1);
Классы могут быть расширениями других классов. Расширенный класс обладает всеми переменными и функциями базового класса и тем, что вы определите при расширении класса. Это делается используя ключевое слово extends :
class Named_Cart extends Cart {
var $owner;
function set_owner ($name) {
$this->owner = $name;
}
}
Это определяет класс Named_Cart, который имеет все переменные и функции класса Cart плюс дополнительную переменную $owner и дополнительную функцию set_owner(). Вы можете создать поименованую корзину обычным образом и установить или получить владельца корзины. Также вы можете использовать и нормальные функции корзины в поименованой корзине :
$ncart = new Named_Cart; //Создать корзину
$ncart->set_owner ("kris");//Указать владельцаprint
$ncart->owner; //Распечатать имя владельца корзины
$ncart->add_item ("10", 1);//унаследовано из обычной корзины
Функции работы с данными
Математические функции
Функции округления
abs
Возвращает модуль числа.
Синтаксис:
mixed abs(mixed $number)
Тип параметра $number может быть float или int, а ти п возвращаемого значения всегда совпадает с типом этого параметра.
$x = abs(-4); // $x=4
$x = abs(-7.45); // $x=7.45
round
Округление дробного числа до целого.
Синтаксис:
double round(double $val)
Округляет $val до ближайшего целого и возвращает результат.
$foo = round(3.4); // $foo == 3.0
$foo = round(3.5); // $foo == 4.0
$foo = round(3.6); // $foo == 4.0
$x = round(5.3); // $x=5
$x = round(5.4); // $x=5
$x = round(5.45); // $x=5
$x = round(5.5); // $x=6
ceil
Дополнение дробного числа до следующего целого.
Синтаксис:
int ceil(float $number)
Возвращает наименьшее целое число, не меньше $number. Разумеется, передавать в $number целое число бессмысленно.
$x = ceil(5.0); // $x=5
$x = ceil(5.1); // $x=6
$x = ceil(5.9); // $x=6
floor
Удаление дробной части числа.
Синтаксис:
int floor(float $number)
Возвращает максимальное целое число, не превосходящее $number.
$x = floor(5.1); // $x=5
$x = floor(5.9); // $x=5
Случайные числа
srand
Производит инициализацию генератора случайных чисел.
Синтаксис:
void srand(int seed)
Инициализирует генератор случайных чисел занчением seed.
srand((double) microtime()*1000000);
$random = rand();
echo $random;
getrandmax
Возвращает максимально возможное случайное число.
Синтаксис:
int getrandmax()
Эта функция возвращает максимальное значение, которое можно получить при помощи функции генерации случайных чисел rand().
Обычно это 32767
rand
Производит генерацию случайного числа.
Синтаксис:
int rand([int max [, int min]])
При вызове с необязательными параметрами min и max эта функция генерирует случайное число, лежащее в пределах этих параметров включительно.
Если параметры min и max отсутствуют, возвращается число, лежащее в пределах от 0 до RAND_MAX.
Для корректной работы данной функции перед ее использованием нужно проинициализировать генератор случайных чисел функцией srand().
mt_rand
Функция возвращает MT-случайное число, достаточно равномерно даже для того, чтобы использовать его в криптографии.
Синтаксис:
int mt_rand(int $min=0, int $max=RAND_MAX)
Если вы хотите генерировать числа не от 0 до RAND_MAX (эта константа задает максимально допустимое случайное число, и ее можно получить при помощи вызова mt_getrandmax()), задайте соответствующий интервал в параметрах $min и $max. Не забудьте только перед первым вызовом этой функции запустить mt_srand().
mt_srand(time()+(double)microtime()*1000000);
$x = mt_rand(1,100); // $x - значение от 1 до 100
mt_srand
Настраивает MT-генератор случайных чисел на новую последовательность.
Синтаксис:
void mt_srand(int seed)
Дело в том, что хотя числа, генерируемые mt_rand(), достаточно равновероятны, но у них есть один нелостаток: последовательность сгенерированных чисел будет одинакова если сценарий вызывать несколько раз подряд. Функция mt_srand() как раз решает данную проблему: она выбирает новую последовательность на основе параметра $seed, причем практически непредсказуемым образом.
mt_srand(time()+(double)microtime()*1000000);
for($i=0;$i<=10;$i++) {
$x = mt_rand(1,10);
};
В этом случае последовательность устанавливается на основе времени запуска сценария (в секундах), поэтому она достаточно непредсказуема. Для еще более надежного результата рекомендуется приплюсовать сюда еще микросекунды (что и было сделано), а также идентификатор процесса, вызывавшего сценарий.
mt_getrandmax
Возвращает максимальное MT-случайное число.
Синтаксис:
int mt_getrandmax()
Возвращает максимальное число, которое может быть сгенерированно функцией mt_rand() - иными словами, константу RAND_MAX
$max = mt_getrandmax();
// $max = 2147483647
lcg_value
функция генерирует случайное дробное число.
Синтаксис:
double lcg_value()
Эта функция возвращает псевдослучайное дробное число в диапазоне от 0 до 1.
Перевод в различные системы счисления
base_convert
Конвертация числа из одной системы счисления в другую.
Синтаксис:
string base_convert(string $number, int $frombase, int $tobase)
Переводит число $number (заданное как строка в системе счисления по основанию $frombase) в систему по основанию $tobase. Параметры $frombase и $tobase могут принимать значения только от 2 до 36 включительно. В строке $number цифры обозначают сами себя, а буква a соответствует 11, b -12, и т.д. до z, которая обозначает 36. Например, следующие команды выведут 11111111 (8 единичек), потому что это - не что иное, как представление шестнадцатиричного числа FF в двоичной системе счисления:
$x = base_convert("FF",16,2); //$x = 11111111
$x = base_convert("11111111",2,16); //$x = FF
$x = base_convert("200",10,16); //$x = C8
bindec
Производит конвертацию двоичного числа в десятичное.
Синтаксис:
int bindec(string binary_string)
Преобразует двоичное число, заданное в строке binary_string, в десятичное число. Максимальное число, которое еще может быть преобразовано, равно 2 147 483 647
$x = bindec(11111111); // $x = 255
$x = bindec(10101010); // $x = 170
$x = bindec(2147483647); // $x = 1111111111111111111111111111111
decbin
Производит конвертацию десятичного числа в двоичное.
Синтаксис:
string decbin(int $number)
Возвращает строку, представляющую собой двоичное представление целого числа $number. Максимальное число, которое еще может быть преобразовано, равно 2 147 483 647, которое выглядит как 31 единичка в двоичной системе.
Существует аналогичные функции для восьмеричной и шестнадцатиричной систем. Называются они так же, только вместо "bin" подставляются соответственно "oct" и "hex".
$x = decbin(255); // $x = 11111111
$x = decbin(2147483647); // $x = 1111111111111111111111111111111
dechex
Производит конвертацию десятичного числа в шестнадцатеричное.
Синтаксис:
string dechex(int number)
Возвращает строку, представляющую собой шестнадцатеричное представление целого числа number. Максимальное число, которое еще может быть преобразовано, равно 2 147 483 647
$x = dechex(2147483647); // $x = 7fffffff
decoct
Производит конвертацию десятичного числа в восьмеричное.
Синтаксис:
string decoct(int number)
Возвращает строку, представляющую собой восьмеричное представление целого числа number. Максимальное число, которое еще может быть преобразовано, равно 2 147 483 647
$x = dechex(2147483647); // $x = 17777777777
hexdec
Производит конвертацию шестнадцатеричного числа в десятичное.
Синтаксис:
int hexdec(string hex_string)
Преобразует шестнадцатеричное число, заданное в строке hex_string, в десятичное число. Максимальное число, которое еще может быть преобразовано, равно 7fffffff
$x = hexdec(7fffffff); // $x = 2147483647
octdec
Производит конвертацию восьмеричного числа в десятичное.
Синтаксис:
int octdec(string octal_string)
Преобразует восьмеричное число, заданное в строке octal_string, в десятичное число. Максимальное число, которое еще может быть преобразовано, равно 17777777777
$x = octdec(17777777777); // $x = 2147483647
deg2rad
Производит конвертацию градусов в радианы.
Синтаксис:
double deg2rad(double number)
Преобразует градусы, заданные в параметре number, в радианы.
rad2deg
Производит конвертацию радианов в градусы.
Синтаксис:
double rad2deg(double number)
Преобразует радианы, заданные в параметре number, в градусы.
number_format
Форматирование числа.
Синтаксис:
number_format($number, $decimals, $dec_point=".", $thousands_sep=",");
Эта функция форматирует число с плавающей точкой с разделением его на триады с указанной точностью. Она может быть вызвана с двумя или четырьмя аргументами, но не с тремя! Параметр $decimals задает, сколько цифр после запятой должно быть у числа в выходной строке.
Параметр $dec_point представляет собой разделитель целой и дробной частей, а параметр $thousands_sep - разделитель триад в числе (если указать на его месте пустую строку, то триады не отделяются друг от друга).
Минимум и максимум
min
Эта функция возвращает наименьшее из чисел, заданных в ее аргументах.
Синтаксис:
mixed min(mixed $arg1 [int $arg2, ..., int $argn])
Различают два способа вызова этой функции: с одним параметром или с несколькими. Если указан лишь один параметр (первый), то он обязательно должен быть массивом и возвращается минимальный элемент этого массива. В противном случае первый (и остальные) аргументы трактуются как числа с плавающей точкой, они сравниваются, и возвращается наименьшее. Тип возвращаемого значения выбирается так: если хотябы одно из чисел, переданных на вход, задано в формате с плавающей точкой, то и результат будет с плавающей точкой, в противном случае результат будет целым числом. С помощью этой функции нельзя лексографически сравнивать строки - только числа.
$x = min(5,3,4,6,5,6,8,9);
// $x = 3
$x[0]=4;
$x[1]=1;
$x[2]=5;
$x[3]=2;
echo min($x); // выведет 1
max
Получение наибольшего аргумента.
Синтаксис:
mixed max(mixed $arg1 [int $arg2, ..., int $argn])
Функция работает аналогично min(), только ищет максимальное значение.
$x = max(5,3,4,6,5,6,8,9);
// $x = 9
$x[0]=4;
$x[1]=1;
$x[2]=5;
$x[3]=2;
echo max($x); // выведет 5
Степенные функции
sqrt
Возвращает квадратный корень из аргумента.
Синтаксис:
float sqrt(float $arg)
Если аргумент отрицателен, то генерируется предупреждение, но работа программы не прекращается!
$x = sqrt(9);
// $x = 3
echo sqrt(25); // выведет 5
echo sqrt(-25); // выведет -1.#IND
log
Возвращает натуральный логарифм аргумента.
Синтаксис:
float log(float $arg)
В случае недопустимого числа печатает предупреждение, но не завершает программу.
$x = log(exp(2)); // exp(2) - e в степени 2
// $x = 2
$x = log(M_E); // $x = 1
echo log(10); // выведет 2.302585092994
log10
Возвращает десятичный логарифм аргумента.
Синтаксис:
float log10(float $arg)
В случае недопустимого числа печатает предупреждение, но не завершает программу.
echo log10(100); // выведет 2
exp
Возвращает e (2,718281828) в степени $arg.
Синтаксис:
float exp(float $arg)
$x = exp(1);
// $x = 2.718281828459
pow
Возведение в степень.
Синтаксис:
float pow(float $base, float $exp)
Возвращает $base в степени $exp.
$x = pow(3,2); // $x = 9
$x = pow("3",2); // $x = 9
Тригонометрия
sin
Возвращает синус аргумента.
Синтаксис:
float sin(float $arg)
Аргумент задается в радианах.
$x = sin(M_PI_2); // $x = 1
cos
Возвращает косинус аргумента.
Синтаксис:
float cos(float $arg)
$x = cos(0); // $x = 0
$x = cos(M_PI); // $x = -1
tan
Возвращает тангенс аргумента, заданного в радианах.
Синтаксис:
float tan(float $arg)
$x = tan(M_PI_4); // $x = 1
acos
Возвращает арккосинус аргумента.
Синтаксис:
float acos(float $arg)
$x = acos(0); // $x = pi/2
$x = acos(1); // $x = 0
asin
Возвращает арксинус.
Синтаксис:
float asin(float $arg)
$x = asin(0); // $x = 0
$x = asin(1); // $x = pi/2
atan
Возвращает арктангенс аргумента.
Синтаксис:
float atan(float $arg)
$x = atan(0); // $x = 0
$x = atan(1); // $x = pi/4
atan2
Получение арктангенса двух чисел.
Синтаксис:
float atan2(float $y, float $x)
Возвращает арктангенс величины $y/$x, но с учетом той четверти, в которой лежит точка ($x,$y). Эта функция возвращает результат в радианах, принадлежащий отрезку от -? до ?.
$x = atan2(1,1); // $x = pi/4
$x = atan2(-1,-1); // $x = -3*pi/4
pi
Возвращает число пи - 3,14.
Синтаксис:
double pi()
Эту функцию обязательно нужно вызывать с парой пустых скобок:
$x = pi()*2 // $x = 31.415926535898
Функции повышенной точности BCMath
bcadd
Сложение двух чисел произвольной точности.
Синтаксис:
string bcadd(string left_operand, string right_operand [, int scale]);
Эта функция возвращает строковое представление суммы двух параметров (left_operand + right_operand) с точностью, которая указана в необязательном параметре scale.
Точность (scale) указывает количество десятичных знаков после запятой).
bccomp
Сравнение двух чисел произвольной точности.
Синтаксис:
int bccomp(string left_operand, string right_operand, [int scale]);
Сравнивает числа (left_operand с right_operand) и возвращает результат типа integer (целое). Параметр scale используется для установки количества цифр после десятичной отметки, используемых при сравнении. При равенстве двух частей возвращается значение 0. Если левая часть больше правой части возвращается +1, и если левая часть меньше правой части возвращается -1.
bcdiv
Операция деления для двух чисел произвольной точности.
Синтаксис:
string bcdiv(string left_operand, string right_operand [, intscale]);
Делит left_operand на right_operand и возвращает результат с точностью (знаками после запятой), заданной в параметре scale.
bcmod
Возвращает остаток целочисленного деления.
Синтаксис:
string bcmod(left_operand, string modulus);
Данная функция возвращает остаток от целочисленного деления left_operand на modulus.
bcmul
Операция умножения для двух чисел произвольной точности.
Синтаксис:
string bcmul(string left_operand, string right_operand [, int scale]);
Производит умножение left_operand на right_operand, и выдает результат в виде строки с точностью, заданной в переменной scale.
bcpow
Возведение одного числа произвольной точности в степень другого.
Синтаксис:
string bcpow(string x, string y, [int scale]);
Возведение x в степень y. Параметр scale может использоваться для установки количества цифр после точки.
bcscale
Устанавливает точность вычислений.
Синтаксис:
string bcscale(int scale);
Эта функция устанавливает заданную по умолчанию точность вычислений для всех математических функций BCMath, которые явно не определяют точность.
bcsqrt
Получение квадратного корня числа произвольной точности.
Синтаксис:
string bcsqrt(string operand [,int scale]);
Возвращает квадратный корень аргумента operand. Параметр scale устанавливает количество цифр после десятичной отметки в результате.
bcsub
Вычитает одно число произвольной точности из другого.
Синтаксис:
string bcsub(string left_operand, right_operand [, int scale]);
Возвращает разность двух переменных, указанных в параметрах функции (left_operand - right_operand) с точностью, указанной в необязательном параметре scale.
Функции GMP
Подразделы
Функции
Введение
Функции этого вида позволяют работать с целыми числами повышенной точности определенного формата используя библиотеку GNU MP.Эта библиотека не входит в стандартный пакет PHP. Загрузить коды библиотеки и документацию по ней можно на сайте http://www.swox.com/gmp/.
Функции, приведенные в этой библиотеке, могут также работать с обычными целочисленными аргументами. В этом случае они будут автоматически преобразовываться в формат GMP. Но для увеличения производительности рекомендуется все же использовать числа формата GMP.
Значения функции GMP
gmp_init
Создает число GMP.
Синтаксис:
resource gmp_init(mixed number)
Число GMP создается из целочисленного или строкового аргумента.
В строке может быть указано число десятеричного или шестнадцатеричного формата. Если это шестнадцатеричный формат, то перед числом должен стоять префикс 0x.
$x = gmp_init(45);
$y = gmp_init("46");
$z = gmp_init("0xfa4b");
Данная функция не обязательна (аргументы автоматически конвертируются в формат GMP), но желательна (при использовании функции gmp_init() повышается быстродействие).
gmp_intval
Преобразование GMP-числа в целое.
Синтаксис:
int gmp_intval(resource gmpnumber)
Эта функция конвертирует GMP-число в целое в том случае, если получаемое число не превышает своего максимально допустимого размера.
gmp_strval
Преобразование GMP-числа в строку.
Синтаксис:
string gmp_strval(resource gmpnumber [, int base])
Функция возвращает число gmpnumber в строковом формате в системе счисления, заданной в необязательном параметре base. По умолчанию возвращает в десятичной системе счисления).
Параметр base может принимать значения от 2 до 36.
$x = gmp_init("0xf1a5");
echo "В десятичной : ".gmp_strval($x);
echo "В base-36: ".gmp_strval($x,36);
gmp_abs
Вычисляет модуль GMP-числа.
Синтаксис:
resource gmp_abs(resourse x)
Возвращает абсолютное значение числа, заданного в параметре x.
gmp_sign
Возвращает знак числа.
Синтаксис:
int gmp_sign(resource x)
Функция gmp_sign() возвратит 1, если x - положительное число, и 0 - если отрицательное.
gmp_neg
Возвращает отрицательное значение числа.
Синтаксис:
recource gmp_neg(resource x)
Возвратит -x.
Арифметика
gmp_add
Сложение двух чисел.
Синтаксис:
recource gmp_add(resource x, recource y)
Функция возвратит GMP-число, равное сумме аргументов x и y.
gmp_sub
Вычитание двух чисел.
Синтаксис:
recource gmp_sub(resource x, recource y)
Функция возвратит GMP-число, равное разности аргументов x и y.
gmp_mul
Умножение двух чисел.
Синтаксис:
recource gmp_mul(resource x, recource y)
Функция возвратит GMP-число, равное произведению аргументов x и y.
gmp_div
Деление двух чисел.
Синтаксис:
recource gmp_div(resource x, recource y [, int round])
Функция возвратит GMP-число, равное делению аргументов x на y. В зависимости от необязательного параметра round, результат деления будет округляться следующим образом:
Эта функция - синоним gmp_div_q().
gmp_div_q
Деление двух чисел.
Синтаксис:
recource gmp_div_q(resource x, recource y [, int round])
Функция возвратит GMP-число, равное делению аргументов x на y. В зависимости от необязательного параметра round, результат деления будет округляться следующим образом:
У этой функции есть синоним - gmp_div().
gmp_div_r
Возвращает остаток от целочисленного деления.
Синтаксис:
recource gmp_div_r(resource x, recource y [, int round])
Функция возвращает остаток от деления x на y. Знак будет наследован от аргумента x.
gmp_div_qr
Производит деление с остатком.
Синтаксис:
array gmp_div_qr(resource x, recource y [, int round])
Данная функция комбинирует в себе действие двух предыдущих функций gmp_div_q() и gmp_div_r(). Она возвращает массив, состоящий из двух элементов:
$x=gmp_init("0xf3c3b5");
$result=gmp_div_qr($x, "0xb1");
echo "Целое: ".gmp[strval($result[0]);
echo "Остаток: ".gmp[strval($result[1]);
gmp_mod
Возвращает модуль остатка деления.
Синтаксис:
resource gmp_mod(resource x, recource y)
Данная функция эквивалентна gmp_div_r(), за исключением того, что она возвращает абсолютное значение.
gmp_divexact
Производит безостаточное деление.
Синтаксис:
resource gmp_divexact(resource x, recource y)
Данная функция использует алгоритм "точного" деления. Результат будет достоверным, только если x будет нацело делим y.
gmp_cmp
Производит сравнение двух чисел.
Синтаксис:
int gmp_cmp(resource x, recource y)
Функция возвратит положительное значение, если x y; ноль, елси x = y; отрицательное значени, если x < y.
Математика
gmp_fact
Вычисляет факториал.
Синтаксис:
resource gmp_fact(resourse x)
Возвращает факториал числа, заданного в параметре x.
gmp_sqrt
Вычисляет квадратный корень.
Синтаксис:
resource gmp_sqrt(resourse x)
Возвращает квадратный корень числа, заданного в параметре x.
gmp_sqrtrm
Вычисляет квадратный корень с остатком.
Синтаксис:
array gmp_sqrtrm(resourse x)
Данная функция возвращает массив, в котором элемент с индексом [0] - это квадратный корень аргумента, элемент с индексом [1] - разность между аргументом и элементом [0] в квадрате.
gmp_perfect_square
Определяет, является ли число полным квадратом.
Синтаксис:
bool gmp_perfect_square(resourse x)
Функция gmp_perfect_square() возвратит true, если x является квадратом целого числа. В противном случае вернет false.
gmp_pow
Возведение в степень.
Синтаксис:
resource gmp_pow(resourse x, int y)
Эта функция возвращает результат, равный возведения аргумента x в степень y, при условии, что y не отрицательный.
echo gmp_pow(2,3); // Выведет 8
echo gmp_pow(0,0); // Выведет 1
gmp_powm
gmp_prob_prime
Проверка "вероятно" простого числа.
Синтаксис:
int gmp_prob_prime(resourse x [, int reps])
Эта функция возвратит 0, в случае если x сложное число, т.е. имеющее более двух целых делителей. Возвратит 1, если x, возможно, простое число. Если возвращает 2, то тогда x - наверняка простое число.
Аргумент reps определяет качество проверки. Чем большее это число, тем точнее результат. Может принимать значения от 5 до 10 (по умолчанию).
Эта функция использует алгоритм вероятностного теста Миллера-Рабина.
gmp_gcd
Находит наибольший общий делитель.
Синтаксис:
resource gmp_gcd(resourse x, resource y)
Всегда возвращает положительный результат.
gmp_gcdext
Нахождение наибольшего общего делителя со множителями.
Синтаксис:
array gmp_gcdext(resourse x, resource y)
Функция gmp_gcdext() возвращает массив со значениями g,s,t, такими, что x*s+y*t=g=НОД(x,y), гдн НОД - наибольший общий делитель.
gmp_invert
Производит инверсию по модулю.
Синтаксис:
resource gmp_invert(resourse x, resource y)
Функция возвращает дополнение x до значения, делящегося нацело на y. В случае, если результат не может быть найден, возвращает false.
gmp_legendre
Возвращает число Легранжа.
Синтаксис:
int gmp_legendre(resourse x, resource p)
Функция возвращает число Легранжа. p должен быть четным положительным.
gmp_jacobi
Возвращает число Якоби.
Синтаксис:
int gmp_jacobi(resourse x, resource p)
Функция возвращает число Якоби. p должен быть четным положительным.
gmp_random
Производит генерацию случайного числа.
Синтаксис:
resource gmp_random(int limited)
limited задает длину генерируемого числа. В случае, если значение limited отрицательно, генерируется отрицательное число.
gmp_popcount
Получение популяции.
Синтаксис:
int gmp_popcount(resource x)
Функция возвращает числитель популяции.
gmp_hamdist
Вычисление дистанции.
Синтаксис:
int gmp_hamdist(resource x, resource y)
Функция возвращает дистанцию между числами x и y. Аргументы x и y должны быть неотрицательными.
Бинарные операции
gmp_and
Логическое И (AND).
Синтаксис:
resource gmp_and(resource x, resource y)
gmp_or
Логическое ИЛИ (OR).
Синтаксис:
resource gmp_or(resource x, resource y)
gmp_xor
Логическое исключающее-ИЛИ (XOR).
Синтаксис:
resource gmp_xor(resource x, resource y)
gmp_setbin
Установка бита.
Синтаксис:
resource gmp_setbin(resource &x, int index [, bool set_clear])
Устанавливает бит в позиции index в числе x. Аргумент set_clear указывает, в какое значение устанавливать бит: 0 или 1 (по умолчанию).
gmp_clrbit
Производит сброс бита.
Синтаксис:
resource gmp_clrbit(resource &x, int index)
Устанавливает бит в позиции index в числе x в значение 0.
gmp_scan0
Производит поиск бита 0.
Синтаксис:
int gmp_scan0(resource x, int start)
Функция gmp_scan0() ищет в числе x бит 0, начиная с позиции start, в сторону увеличения значимости разрядов. Возвращает позицию найденного бита.
gmp_scan1
Производит поиск бита 1.
Синтаксис:
int gmp_scan1(resource x, int start)
Функция gmp_scan0() ищет в числе x бит 1, начиная с позиции start, в сторону увеличения значимости разрядов. Возвращает позицию найденного бита.
Работа с массивами
Введение
Эти функции позволят вам различными способами оперировать с массивами. Массивы идеально подходят для хранения, изменения и работы с наборами переменных.
Поддерживаются одно- и многоразмерные массивы, как созданные пользователем, так и возвращенные в качестве результата какой-либо функцией. Существуют специальные функции для работы с базами данных, облегчающие работу с массивами данных, возвращаемых в результате выполнения запросов; также существуют функции, возвращающие массивы в качестве результата.
Требования
Эти функции всегда доступны.
Установка
Для использования этих функций не требуется проведение установки, поскольку они являются частью ядра PHP.
Настройка во время выполнения
Данное расширение не определяет никакие директивы конфигурации в php.ini.
Типы ресурсов
Данное расширение не определяет никакие типы ресурсов.
Предопределенные константы
Перечисленные ниже константы всегда доступны как часть ядра PHP.
Флаги типа сортировки:
Введение
Введение
Эти функции позволят вам различными способами оперировать с массивами. Массивы идеально подходят для хранения, изменения и работы с наборами переменных.
Поддерживаются одно- и многоразмерные массивы, как созданные пользователем, так и возвращенные в качестве результата какой-либо функцией. Существуют специальные функции для работы с базами данных, облегчающие работу с массивами данных, возвращаемых в результате выполнения запросов; также существуют функции, возвращающие массивы в качестве результата.
Требования
Эти функции всегда доступны.
Установка
Для использования этих функций не требуется проведение установки, поскольку они являются частью ядра PHP.
Настройка во время выполнения
Данное расширение не определяет никакие директивы конфигурации в php.ini.
Типы ресурсов
Данное расширение не определяет никакие типы ресурсов.
Предопределенные константы
Перечисленные ниже константы всегда доступны как часть ядра PHP.
Флаги типа сортировки:
Создание массива
array
Создание и инициализация массива.
Синтаксис:
array array([mixed ...])
Функция возвращает созданный массив. Индексы и значения в массиве разделяются оператором =. Пары index=value разделяются запятыми, они определяют индекс и значение.
Индекс может быть как числовым, так и строковым. В ассоциированных массивах индекс всегда ведет себя как строковой. В случае, если индекс не указан, будет подставляться автоинкремент (на 1 больше), начиная с 0. Если при создании массива были указаны два элемента с одинаковыми индексами, то последний элемент заменяет первый.
Пример использования функции array():
<?php
$arr=array( // Далее мы создадим двумерный массив
"fruit" => array("a"=>"orange", "b"=>"banan", "c"=>"apple"),
// эта запись эквивалентна записи: $arr["fruit"]["a"]="orange"; и т.д.
"number" => array(1,2,3,4,5,6),
// эта запись эквивалентна записи: $arr["number"][]=1; и т.д.
"hotel" => array("first", 5=>"second", "third")
);
?>
$arr=array(1, 1, 1, 1, 2=>5, 19, 3=>20);
print_r($arr);
// Далее распечатка этого массива
Array
(
[0] => 1
[1] => 1
[2] => 5
[3] => 20
[4] => 19
)
$arr=array(1 => "Январь", "Февраль", "Март");
print_r($arr);
// распечатка
Array
(
[1] => Январь
[2] => Февраль
[3] => Март
)
Функция поддерживается PHP 3, PHP 4, PHP 5
range
Создает массив и заполняет его значениями.
Синтаксис:
array range(int low, int high[, int step])
Функция range() возвращает массив с значениями от low по high включительно. Если low high, то последовательность будет от high до low.
Дополнительный параметр step был введен в PHP 5.0.
Если третий параметр указан, то числа будут вводиться от low до high с шагом step. Если он не указан, то шаг будет равен 1.
Пример использования функции range():
<?php
// array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
foreach (range(0, 12) as $number) {
echo $number;
}
// The step parameter was introduced in 5.0.0
// array(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
foreach (range(0, 100, 10) as $number) {
echo $number;
}
// Use of character sequences introduced in 4.1.0
// array("a", "b", "c", "d", "e", "f", "g", "h", "i");
foreach (range("a", "i") as $letter) {
echo $letter;
}
// array("c", "b", "a");
foreach (range("c", "a") as $letter) {
echo $letter;
}
?>
Функция поддерживается PHP 3 = 3.0.8, PHP 4, PHP 5
Сортировка массивов
array_reverse
Расстановка элементов массива в обратном порядке.
Синтаксис:
array array_reverse(array arr [, bool preserve_keys])
Функция array_reverse() возвращает массив, элементы которого следуют в обратном порядке относительно массива, переданного в параметре. При этом связи между ключами и значениями не теряются, если дополнительный параметр preserve_keys = TRUE.
Пример использования функции array_reverse():
<?php
$input = array("php", 4.0, array("green", "red"));
$result = array_reverse($input);
$result_keyed = array_reverse($input, true);
?>
Этот пример сделает оба массива $result и $result_keyed с одинаковыми значениями, но различными ключами. Распечатка массивов $result и $result_keyed будет следующей:
Array( [0] => Array ( [0] => green [1] => red ) [1] => 4 [2] => php)Array( [2] => Array ( [0] => green [1] => red ) [1] => 4 [0] => php)
Примечание: Второй параметр preserve_keys был добавлен в PHP 4.0.3.
Функция поддерживается PHP 4, PHP 5
shuffle
Перемешивание элементов массива.
Синтаксис:
void shuffle(array arr)
Функция shuffle() "перемешивает" список, переданный ей первым параметром arr, так, чтобы его значения распределялись случайным образом. При этом измениться сам массив и ассоциативные массивы воспринимаются как списки.
Пример использования функции shuffle():
<?php
$numbers = range(1, 20);
srand((float)microtime() * 1000000);
shuffle($numbers);
while (list(, $number) = each($numbers)) {
echo "$number ";
}
?>
Замечание: Начиная с PHP 4.2.0, больше нет необходимости инициализировать генератор случайных чисел функциями srand() или mt_srand(), поскольку теперь это происходит автоматически.
Функция поддерживается PHP 3 = 3.0.8, PHP 4, PHP 5
sort
Сортировка массива по возрастанию.
Синтаксис:
bool sort(array arr [, int sort_flags])
Функция sort() предназначена для сортировки массивов в порядке возрастания.
Замечание: Эта функция изменяет ключи у отсортированных значений. Т.е. любой ассоциативный массив воспринимается этой функцией как список. После упорядочивания последовательность ключей превращается в 0,1,2,..., а значения нужным образом перераспределяются. Как видим, связи между параметрами ключ=значение не сохраняются, более того - ключи просто пропадают, поэтому сортировать что-либо, отличное от списка, вряд ли целесообразно.
Пример использования функции sort():
<?php
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
echo "fruits[" . $key . "] = " . $val . "n";
}
?>
Этот пример выведет:
fruits[0] = applefruits[1] = bananafruits[2] = lemonfruits[3] = orange
Аргумент sort_flags задает следующие флаги сортировки:
Функция поддерживается PHP 3, PHP 4, PHP 5
rsort
Сортировка массива по убыванию.
Синтаксис:
bool rsort ( array array [, int sort_flags])
Функция rsort() сортирует массив array в порядке убывания (от высших значений к низшим).
Функция возвращает TRUE в случае успешного завершения, и FALSE в противном случае.
Пример использования функции rsort():
<?php
$fruits = array("lemon", "orange", "banana", "apple");
rsort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
echo "$key = $valn";
}
?>
Этот пример выведет:
0 = orange1 = lemon2 = banana3 = apple
Аргумент sort_flags задает следующие флаги сортировки:
Функция поддерживается PHP 3, PHP 4, PHP 5
asort
Сортировка ассоциативного массива по возрастанию.
Синтаксис:
bool asort(array arr [, int sort_flags])
Функция asort() сортирует массив, указанный в ее параметре, так, чтобы его значения шли в алфавитном (если это строки) или возрастающем (для чисел) порядке. При этом сохраняются связи между ключами и соответствующими им значениями, т.е. некоторые пары ключ=значение просто "всплывают" наверх, а некоторые - наоборот, "опускаются".
Функция возвращает true в случае успешного завершения, и false в случае возникновения ошибки.
Пример использования функции asort():
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
echo "$key = $valn";
}
?>
Пример выведет следующее:
c = appleb = bananad = lemona = orange
Массив $fruits был отсортирован в возрастающем символьном порядке, при этом индексы массива были сохранены.
Метод сортировки может быть изменен при помощи необязательного параметра sort_flags.
Этот параметр может указать, как сравнивать значения (как строки или как числа). Он может принимать следующие предопределенные значения:
Этот параметр был введен в PHP начиная с 4 версии.
Функция поддерживается PHP 3, PHP 4, PHP 5
arsort
Сортировка ассоциативного массива по убыванию.
Синтаксис:
bool arsort(array arr [, int sort_flags])
Функция arsort() сортирует массив arr по убыванию с сохранением индексных ассоциаций.
Эта функция используется главным образом там, где существенен порядок элемента в массиве.
Функция возвращает true в случае успешной сортировки, и false в случае возникновения ошибки.
Пример использования функции arsort():
$arr=array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
arsort($arr);
reset($arr);
while(list ($key, $val) = each ($arr)) {
echo "$key = $val<BR>l";
}
Пример выведет:
a = oranged = lemonb = bananac = apple
Массив $arr был отсортирован в убывающем символьном порядке, при этом индексы массива были сохранены.
Метод сортировки может быть изменен при помощи необязательного параметра sort_flags.
Этот параметр может указать, как сравнивать значения (как строки или как числа). Он может принимать следующие предопределенные значения:
Этот параметр был введен в PHP начиная с 4 версии.
Функция поддерживается PHP 3, PHP 4, PHP 5
ksort
Сортировка массива по возрастанию ключей.
Синтаксис:
bool ksort(array arr [, int sort_flags])
Функция ksort() сортирует массив в порядке возрастания ключей с сохранением взаимосвязей ключей и значений. Эта функция особенно полезна при сортировке ассоциативных массивов.
Функция возвратит true, если все прошло успешно, и false в противном случае.
Пример использования функции ksort():
<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
echo "$key = $valn";
}
?>
Данный пример выведет:
a = orangeb = bananac = appled = lemon
Аргумент sort_flags задает следующие флаги сортировки:
Функция поддерживается PHP 3, PHP 4, PHP 5
krsort
Сортировка массива по убыванию индексов.
Синтаксис:
bool krsort(array arr [, int sort_flags])
Функция krsort() сортирует ключи в массиве arr в обратном порядке. При этом связка ключей и значений сохраняется. Эта функци полезна при сортировке ассоциативных массивов.
Функция возвращает true в случае успешного завершения, и false в противном случае.
Пример использования функции krsort():
<?php
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
krsort($fruits);
reset($fruits);
while (list($key, $val) = each($fruits)) {
echo "$key = $valn";
}
?>
Данный пример выведет:
d = lemonc = appleb = bananaa = orange
Аргумент sort_flags задает следующие флаги сортировки:
Функция поддерживается PHP 3 = 3.0.13, PHP 4, PHP 5
natsort
Выполняет "естественную" сортировку массива.
Синтаксис:
void natsort(array arr)
Функция natsort() сортирует массив arr в естественном для человека порядке с сохранением индексных ассициаций.
Пример использования функции natsort():
<?php
$array1 = $array2 = array("img12.png", "img10.png", "img2.png", "img1.png");
sort($array1);
echo "Стандартная сортировкаn";
print_r($array1);
natsort($array2);
echo "nЕстественная сортировкаn";
print_r($array2);
?>
Этот пример выведет следующее:
Стандартная сортировкаArray( [0] => img1.png [1] => img10.png [2] => img12.png [3] => img2.png)Естественная сортировкаArray( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png)
Функция поддерживается PHP 4, PHP 5
natcasesort
Выполняет естественную сортировку массива без учета регистра символов.
Синтаксис:
void natcasesort(array arr)
Функция natcasesort() сортирует массив arr в естественном для человека порядке с сохранением индексных ассициаций.
Эта функция схожа с natsort(), только не учитывает регистр символов.
Пример использования функции natcasesort():
<?php
$array1 = $array2 = array("IMG0.png", "img12.png", "img10.png",
"img2.png", "img1.png", "IMG3.png");
sort($array1);
echo "Стандартная сортировкаn";
print_r($array1);
natcasesort($array2);
echo "nЕстественная сортировка (без учета регистра)n";
print_r($array2);
?>
Приведенный пример выведет следующее:
Стандартная сортировкаArray( [0] => IMG0.png [1] => IMG3.png [2] => img1.png [3] => img10.png [4] => img12.png [5] => img2.png)Естественная сортировка (без учета регистра)Array( [0] => IMG0.png [4] => img1.png [3] => img2.png [5] => IMG3.png [2] => img10.png [1] => img12.png)
Функция поддерживается PHP 4, PHP 5
uasort
Пользовательская сортировка ассоциативного массива с сохранением индексных ассоциаций.
Синтаксис:
bool uasort(array arr, function cmp_function)
Функция uasort() сортирует массив arr с сохранением индексных ассоциаций, используя для сравнения индексов элементов пользовательскую функцию, указанную аргументом cmp_function.
Эта функция используется главным образом когда соответствие индексов и значений массива существенно.
Функция uasort() возвращает true в случае успешного завершения сортировки, и false в противном случае.
Замечание: Смотрите функции usort() и uksort() для написания пользовательской функции.
Функция поддерживается PHP 3 =3.0.4, PHP 4, PHP 5
uksort
Пользовательская сортировка массива по ключам.
Синтаксис:
bool uksort(array arr, function cmp_function)
Функция uksort() сортирует массив arr по индексам с сохранением индексных ассоциаций, используя для сравнения индексов элементов пользовательскую функцию, указанную в аргументе cmp_function. В эту функцию передаются два сравниваемых индекса элементов, а она должна вернуть положительное или отрицательное число или 0.
Функция uksort() возвращает true в случае успешного завершения сортировки, и FALSE в противном случае.
Довольно часто нам приходится сортировать что-то по более сложному критерию, чем просто по алфавиту. Например, пусть в $Files храниться список имен файлов и подкаталогов в текущем каталоге. Возможно, мы захотим вывести этот список не только в лексографическом порядке, но также чтобы все каталоги предшествовали файлам. В этом случае нам стоит воспользоваться функцией uksort(), написав предварительно функцию сравнения с двумя параметрами, как того требует uksort().
1 пример использования функции uksort():
// Эта функция должна сравнивать значения $f1 и $f2 и возвращать:
// -1, если $f1<$f2,
// 0, если $f1==$f2
// 1, если $f1>$f2
// Под < и > понимаем следование этих имен в выводимом списке
function FCmp($f1,$f2)
{ // Каталог всегда предшествует файлу
if(is_dir($f1) && !is_dir($f2)) return -1;
// Файл всегда идет после каталога
if(!is_dir($f1) && is_dir($f2)) return 1;
// Иначе сравниваем лексиграфически
if($f1<$f2) return -1; elseif($f1>$f2) return 1; else return 0;
}
// Пусть $Files содержит массив с ключами - именами файлов
// в текущем каталоге. Отсортируем его.
uksort($Files,"FCmp"); //передаем функцию сортировки "по ссылке"
2 пример использования функции uksort():
<?php
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($a)) {
echo "$key: $valuen";
}
?>
Этот пример выведет:
20: twenty10: ten4: four3: three
Функция поддерживается PHP 3 =3.0.4, PHP 4, PHP 5
usort
Пользоваетльская сортировка значений массива.
Синтаксис:
bool usort(array arr, callback cmp_function)
Функция usort() сортирует массив arr без сохраненя индексных ассоциаций, используя для сравнения значений пользовательскую функцию, указанную в аргументе cmp_function. В эту функцию передаются два сравниваемых индекса элементов, а она должна вернуть положительное или отрицательное число или 0.
Эта функция как бы является "гибридом" функций uasort() и sort(). От sort() она отличается тем, что критерий сравнения обеспечивается пользовательской функцией. А от uasort() - тем, что она не сохраняет связей между ключами и значениями, а потому пригодна разве что для сортировки списков.
Пример использования функции usort():
<?php
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
while (list($key, $value) = each($a)) {
echo "$key: $valuen";
}
?>
Пример одномерного массива:
function cmp($a, $b) {
if($a==$b) return 0;
return ($a > $b) ? -1 : 1;
}
$a=array (3,2,5,6,1);
usort($a, "cmp");
while(list($key,$val)=each($a)) {
echo "$key: $valn";
}
При выполнении будет напечатано:
0: 61: 52: 33: 24: 1
Пример многомерного массива:
function cmp($a,$b) {
return strcmp($a["fruit"],$b["fruit"]);
};
$fruit[0]["fruit"]="lemons";
$fruit[1]["fruit"]="apples";
$fruit[2]["fruit"]="grapes";
usort($fruit, "cmp");
while(list($key,$val)=each($fruit)) {
echo "$fruit[$key]:".$val["fruit"]."n";
}
При сортировке многомерных массивов $a и $b содержит ссылки на первый индекс массива.
Будет напечатано:
$fruit[0]: apples$fruit[1]: grapes$fruit[2]: lemons
Если необходимо отсортировать массив с различными вторыми ключами, можно поступить следующим образом:
<?php
function arr_sort($a,$b) {
list($key1,$val)=each($a);
list($key2,$val)=each($b);
return strcmp($a[$key1],$b[$key2]);
};
$arr[0]["1-ый элемент"]="яблока";
$arr[1]["2-ый элемент"]="груша";
$arr[2]["3-ый элемент"]="персик";
$arr[3]["4-ый элемент"]="дыня";
$arr[4]["5-ый элемент"]="малина";
$arr[5]["6-ый элемент"]="ананас";
usort($arr,"arr_sort");
echo "<pre>";
print_r($arr);
echo "</pre>";
?>
Приведенный скрипт выведет следующее:
Array( [0] => Array ( [6-ый элемент] => ананас ) [1] => Array ( [2-ый элемент] => груша ) [2] => Array ( [4-ый элемент] => дыня ) [3] => Array ( [5-ый элемент] => малина ) [4] => Array ( [3-ый элемент] => персик ) [5] => Array ( [1-ый элемент] => яблока ))
Функция поддерживается PHP 3 =3.0.3, PHP 4, PHP 5
array_multisort
Сортировка нескольких массивов или многомерного массива.
Синтаксис:
bool array_multisort(array ar1, [, mixed arg [, mixed ... [, array ...]]])
Функция array_multisort() сортирует сразу несколько массивов или многомерные массивы с сохранением индексной ассоциации, возвращая true при отсутствии ошибок.
Исходные массивы рассматриваются как столбцы таблицы, сортируемой построчно. Поэтому массивы должны иметь одинаковое число элементов, и взаимосвязь между ними, как в строках таблицы, сохраняется. Приоритетом сортировки пользуются первые массивы. Флаги сортировки могут указваться для каждого массива, и их действие распространяется только на тот массив, после которого они указаны.
Флаги определения порядка сортировки:
Флаги типа сортировки:
Уазание несколько флагов сортировки после одного массива недопустимо. Флаги сортировки, которые переются после аргумента arr применяются только к этому аргументу. Если после следующего аргумента флаги не указаны, то принимаются флаги по умолчанию (SORT_ASC, SORT_REGULAR).
Пример использования функции array_multisort():
Сортировка нескольких массивов
ar1 = array("10", 100, 100, "a");
ar2 = array(1, 3, "2", 1);
array_multisort($ar1, $ar2);
// $ar1 = array("10", "a", 100, 100);
// $ar2 = array(1, 1, "2", 3);
Элементы второго массива, соответствующие одинаковым элементам (100 и 100) первого массива, также отсортированны.
Сортировка многомерного массива
$ar = array(array("10", 100, 100, "a"), array(1, 3, "2", 1));
array_multisort($ar[0], SORT_ASC, SORT_STRING,
$ar[1], $SORT_NUMERIC, SORT_DESC);
// $ar[0] = ("10", 100, 100, "a") - сортируются как строки по возрастанию
// $ar[1] = (1, 3, "2", 1) - сортируются как числа по убыванию
Функция поддерживается PHP 4, PHP 5
Курсор массива
reset
Производит сброс курсора массива.
Синтаксис:
mixed reset(array arr)
Функция reset() устанавливает внутренний курсор массива arr на его начало и возвращает значение начального элемента.
Пример использования функции reset():
<?php
$array = array("step one", "step two", "step three", "step four");
// by default, the pointer is on the first element
echo current($array) . "<br />n"; // "step one"
// skip two steps
next($array);
next($array);
echo current($array) . "<br />n"; // "step three"
// reset pointer, start again on step one
reset($array);
echo current($array) . "<br />n"; // "step one"
?>
Функция поддерживается PHP 3, PHP 4, PHP 5
end
Производит перенос курсора в конец массива.
Синтаксис:
mixed end(array arr)
Функция end() устанавливает внутренний курсор массива arr на последний элемент и возвращает значение этого элемента.
Пример использования функции end():
<?php
$fruits = array("apple", "banana", "cranberry");
echo end($fruits); // cranberry
?>
Функция поддерживается PHP 3, PHP 4, PHP 5
next
Производит перенос курсора вперед.
Синтаксис:
mixed next(array arr)
Функция next() возвращает значение элемента, на котором в данный момент находится курсор, и перемещает курсор массива на следующий элемент. Возвращает false, если элементов больше не осталось.
Также false возвращается, если встречается элемент с пустым значением, следовательно для корректной работы с массивом, содержащим пустые элементы, лучще использовать функцию each().
Пример использования функции next():
<?php
$transport = array("foot", "bike", "car", "plane");
$mode = current($transport); // $mode = "foot";
$mode = next($transport); // $mode = "bike";
$mode = next($transport); // $mode = "car";
$mode = prev($transport); // $mode = "bike";
$mode = end($transport); // $mode = "plane";
?>
Функция поддерживается PHP 3, PHP 4, PHP 5
prev
Производит перенос курсора назад и возвращает предыдущее значени.
Синтаксис:
mixed prev(array arr)
Функция prev() перемещает курсор массива на предыдущий элемент и возвращает его значение. Возвращает false, если элементов больше не осталось.
Также false возвращается, если встречается элемент с пустым значением, следовательно для корректной работы с массивом, содержащим пустые элементы, лучще использовать функцию each().
Пример использования функции prev():
<?php
$transport = array("foot", "bike", "car", "plane");
$mode = current($transport); // $mode = "foot";
$mode = next($transport); // $mode = "bike";
$mode = next($transport); // $mode = "car";
$mode = prev($transport); // $mode = "bike";
$mode = end($transport); // $mode = "plane";
?>
Функция поддерживается PHP 3, PHP 4, PHP 5
current
Определение текущего элемента массива.
Синтаксис:
mixed current(array arr)
Каждый массив имеет внутренний указатель(курсор) текущего элемента. Обычно он указывает на первый элемент массива.
Функция current() возвращает значение элемента, на котором в данный момент находится курсор массива, при этом не сдвигая курсор.
Если указатель находиться за пределами массива, или массив пустой, то функция возвратит FALSE.
Пример использования функции current():
<?php
$transport = array("foot", "bike", "car", "plane");
$mode = current($transport); // $mode = "foot";
$mode = next($transport); // $mode = "bike";
$mode = current($transport); // $mode = "bike";
$mode = prev($transport); // $mode = "foot";
$mode = end($transport); // $mode = "plane";
$mode = current($transport); // $mode = "plane";
?>
Функция поддерживается PHP 3, PHP 4, PHP 5
pos
Определение текущего элемента массива.
Синтаксис:
mixed pos(array arr)
Эта функция синоним функции current().
key
Функция возвращает индекс текущего элемента массива.
Синтаксис:
mixed key(array arr)
Функция key() возвращает индекс текущего элемента массива.
Пример использования функции key():
<?php
$array = array(
"fruit1" => "apple",
"fruit2" => "orange",
"fruit3" => "grape",
"fruit4" => "apple",
"fruit5" => "apple");
// этот цикл пройдется по всему массиву
// и выведет имя ключа элемента массива
// значение которого равно "apple"
while ($fruit_name = current($array)) {
if ($fruit_name == "apple") {
echo key($array)."*<br />";
}
next($array);
}
?>
Функция поддерживается PHP 3, PHP 4, PHP 5
each
Получение текущего элемента массива.
Синтаксис:
array each(array arr)
Функция each() возвращает пару"индекс и значение" текущего элемента массива, на который указывает внутренний курсор, и сдвигает курсор массива на следующий элемент.
Пример использования функции each():
<?php
$foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese");
$bar = each($foo);
print_r($bar);
?>
Массив $bar будет иметь ключи и значения:
Array( [1] => bob [value] => bob [0] => 0 [key] => 0)
<?php
$foo = array("Robert" => "Bob", "Seppo" => "Sepi");
$bar = each($foo);
print_r($bar);
?>
Массив $bar будет иметь ключи и значения:
Array( [1] => Bob [value] => Bob [0] => Robert [key] => Robert)
Пример использования функции each():
Пролистывание массива
<?php
$fruit = array("a" => "apple", "b" => "banana", "c" => "cranberry");
reset($fruit);
while (list($key, $val) = each($fruit)) {
echo "$key => $valn";
}
?>
Пример выведет:
a => appleb => bananac => cranberry
Функция поддерживается PHP 3, PHP 4, PHP 5
array_walk
Применение пользовательской функции к элементам массива.
Синтаксис:
bool array_walk(array arr, callback function [, mixed userdata])
Функция array_walk() применяет пользовательскую функцию function к каждому элементу массива arr. В пользовательскую функцию передаются три или два (в случае, если аргумент userdata не указан) аргумента: значение текущего элемента, его индекс и аргумент userdata.
В случае, если function требует более трех аргументов, при каждом ее вызове будет выдаваться предупреждение. Чтобы блокировать выдачу этих предупреждений, поставте знак "@" перед функцией array_walk() или воспользуйтесь функцией error_reporting().
Функция function будет получать значения и индексы массива arr по занчению, т.е. не сможет вносить в него изменения. Если это необходимо, передайте аргумент arr по ссылке, указав перед его именем "&", и тогда все изменения отразяться в массиве.
В PHP 4 необходимо явно вызывать функцию reset(), чтобы установить внутренний курсор на первый элемент.
Пример использования функции array_walk():
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
function test_alter(&$item1, $key, $prefix)
{
$item1 = "$prefix: $item1";
}
function test_print($item2, $key)
{
echo "$key. $item2<br />n";
}
echo "Before ...:n";
array_walk($fruits, "test_print");
array_walk($fruits, "test_alter", "fruit");
echo "... and after:n";
array_walk($fruits, "test_print");
?>
Приведенный пример выведет следующее:
Before ...:d. lemona. orangeb. bananac. apple... and after:d. fruit: lemona. fruit: orangeb. fruit: bananac. fruit: apple
Функция поддерживается PHP 3 = 3.0.3, PHP 4, PHP 5
Ключи и значения
array_flip
Меняет местами индексы и значения массива.
Синтаксис:
array array_flip(array arr)
Эта функция "пробегает" по массиву и меняет местами его ключи и значения. Исходный массив arr не изменяется, а результирующий массив просто возвращается. Если в массиве присутствовало несколько элементов с одинаковыми значениями, учитываться будет только последний из них.
Значения массива arr должны быть либо целыми числами, либо строковыми значениями. Иначе пара ключ / значение не будут обработаны.
Функция array_flip() возвратит FALSE, если обработка массива вызвала ошибку.
Пример использования функции array_flip():
$trans = array_flip ($trans);
$original = strtr ($str, $trans);
Пример использования функции array_flip():
многократное повторение значения
<php
$trans = array ("a" => 1, "b" => 1, "c" => 2);
$trans = array_flip ($trans);
print_r($trans);
Приведенный выше пример выведет следующее:
Array( [1] => b [2] => c)
Функция поддерживается PHP 4, PHP 5
array_keys
Возвращает список из ключей массива.
Синтаксис:
array array_keys(array arr [,mixed search_value])
Функция возвращает массив, значениями которого являются все строковые и числовые ключи массива arr. Если задан необязательный параметр search_value, то она вернет только те ключи, которым соответствуют значению search_value.
Пример испольльзования функции array_keys():
<?php
$arr = array(0 => 100, "color" => "red", 15);
print_r(array_keys($arr));
$arr = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($arr, "blue"));
$array = array ("color" => array("blue", "red", "green"), "size" => array("small", "medium", "large"));
print_r(array_keys ($array));
?>
Приведенный выше пример выведет следующее:
Array( [0] => 0 [1] => color)Array( [0] => 0 [1] => 3 [2] => 4)Array( [0] => color [1] => size)
Функция array_keys() появилась в PHP 4.
Ее эквивалент для PHP 3:
function array_keys ($arr, $term="") {
$t = array();
while (list($k,$v) = each($arr)) {
if ($term && $v != $term) {
continue;
}
$t[] = $k;
}
return $t;
}
Функция поддерживается PHP 4, PHP 5
array_values
Удаление ассоциативных индексов массива.
Синтаксис:
array array_values(array arr)
Функция array_values() возвращает список всех значений в ассоциативном массиве arr. При этом она заменяет все строковые ключи на числовые.
Пример использования функции array_values():
$arr = array("size" => "XL", "color" => "gold");
print_r(array_values($arr));
Этот пример выведет:
Array( [0] => XL [1] => gold)
Функция поддерживается PHP 4, PHP 5
in_array
Осуществляет проверку массива на наличие значения.
Синтаксис:
bool in_array ( mixed needle, array haystack [, bool strict])
Функция in_array() возвратит TRUE, если в массиве haystack содержится элемент со значением needle, и FALSE в противном случае.
Если установить третий необязательный параметр strict в значение TRUE, то функция in_array() при проверке также будет сравнивать типы значений.
Замечание: Если параметр needle является строкой, то при сравнении регистр символов учитывается.
Замечание: В PHP версии ниже 4.2.0 параметр needle не мог быть массивом.
Пример использования функции in_array():
<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Got Irix";
}
if (in_array("mac", $os)) {
echo "Got mac";
}
?>
Второе условие не сработает, т.к. поиск в массиве идет с учетом регистра.
Пример выведет:
Got Irix
Пример использования функции in_array(): Использование параметра strict
<?php
$a = array(array("p", "h"), array("p", "r"), "o");
if (in_array(array("p", "h"), $a)) {
echo "ph was foundn";
}
if (in_array(array("f", "i"), $a)) {
echo "fi was foundn";
}
if (in_array("o", $a)) {
echo "o was foundn";
}
?>
Пример выведет:
ph was found o was found
Функция поддерживается PHP 4, PHP 5
array_count_values
Возвращает количество значений массива.
Синтаксис:
array array_count_values(array arr)
Эта функция подсчитывает, сколько раз каждое значение встречается в массиве arr, и возвращает ассоциативный массив с ключами - элементами массива и значениями - количеством повторов этих элементов. Иными словами, функция array_count_values() подсчитывает частоту появления значений в массиве arr.
Пример использования функции array_count_values():
$arr = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($arr));
Пример выведет следующее:
Array( [1] => 2 [hello] => 2 [world] => 1)
Функция поддерживается PHP 4, PHP 5
sizeof
Возвращает число элементов массива.
Синтаксис:
int sizeof(array arr)
Функция sizeof() возвращает количество элементов в массиве arr на подобие действия функции count().
count
Возвращает число элементов в массиве или объекте.
Синтаксис:
int count(mixed var [, int mode])
Функция count() возвращает число элементов в массиве или объекте var. В случае, если var - скалярная переменная, то функция возвращает 1, если такая переменная существует, или 0, если такой переменной нет.
Надо отметить, что 0 возвращается и тогда, когда указан массив, не содержащий элементов (NULL).
Если задан необязательный параметр mode, то будет подсчитано общее количество элементов в массиве. Это может быть полезно при нахождении количества элементов в многомерных массивах.
Пример использования функции count():
<?php
$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
$result = count($a);
// $result == 3
$b[0] = 7;
$b[5] = 9;
$b[10] = 11;
$result = count($b);
// $result == 3;
?>
Пример использования функции count(): (PHP = 4.2.0)
<?php
$food = array("fruits" => array("orange", "banana", "apple"),
"veggie" => array("carrot", "collard", "pea"));
// recursive count
echo count($food, COUNT_RECURSIVE); // выведет 8
// normal count
echo count($food); // выведет 2
?>
Функция поддерживается PHP 3, PHP 4, PHP 5
array_sum
Возвращает сумму всех элементов массива.
Синтаксис:
mixed array_sum(array arr)
Функция array_sum() возвращает сумму всех числовых элементов массива. От типа значений в массиве зависит тип возвращаемого числа (integer или float).
Пример использования функции array_sum():
<?php
$a = array(2, 4, 6, 8);
echo "sum(a) = " . array_sum($a) . "<BR>";
$b = array("a" => 1.2, "b" => 2.3, "c" => 3.4);
echo "sum(b) = " . array_sum($b) . "<BR>";
?>
Этот пример выведет следующее:
sum(a) = 20sum(b) = 6.9
Функция поддерживается PHP 4 =4.0.4, PHP 5
array_rand
Производит случайную выборку индексов массива.
Синтаксис:
mixed array_rand(array arr [, int num_req])
Функция array_rand() будет полезной, если вы хотите выбрать одно или несколько случайных значений из массива. Эта функция возвращает в массиве выбранные случайным образом индексы элементов массива arr.
Аргумент num_req указывает число возвращаемых индексов. В случае, если выбирается один элемент, то функция array_rand() возвратит случайный ключ в виде значения.
Пример использования функции array_rand():
<?php
srand((double)microtime() *1000000);
// здесь мы проинициализировали генератор случайных чисел
$arr = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($arr, 2);
echo $arr[$rand_key[0]]."<BR>";
echo $arr[$rand_key[1]]."<BR>";
?>
Функция поддерживается PHP 4, PHP 5
array_change_key_case
Функция устанавливает значения ключей массива в верхний или нижний регистр.
Синтаксис:
array array_change_key_case(array arr[, int registr])
Функция array_change_key_case() возвращает исходный массив arr, ключи которого преобразованы в верхний или нижний регистр.
Необязательный параметр registr может принимать следующие значения:
Данная функция не изменяет ключи, состоящие из чисел.
Пример использования функции array_change_key_case():
$array = array("FirSt" => 1, "SecOnd" => 4);
print_r(array_change_key_case($array, CASE_UPPER));
print_r(array_change_key_case($array, CASE_LOWER));
Пример выведет следующее:
Array
(
[FIRST] => 1
[SECOND] => 2
)
Array
(
[first] => 1
[second] => 2
)
Функция поддерживается PHP 4 = 4.2.0, PHP 5
array_combine
Функция объединяет два массива, причем значения первого становяться ключами, а значения второго - значениями.
Синтаксис:
array array_combine(array keys, array values)
Функция array_combine() возвращает массив, ключами которого являются значения массива keys, а значениями - значения массива values.
Функция возвратит FALSE, если размерность массивов keys и values не совпадают, или эти массивы не содержат значений.
Пример использования функции array_combine():
<?php
$a = array("green", "red", "yellow");
$b = array("avocado", "apple", "banana");
$c = array_combine($a, $b);
print_r($c);
?>
Пример выведет следующее:
Array( [green] => avocado [red] => apple [yellow] => banana)
Функция поддерживается PHP 5
array_key_exists
Проверка существования заданного ключа в массиве.
Синтаксис:
bool array_key_exists(mixed key, array search)
Функция array_key_exists() возвратит TRUE, если в массиве search присутствует элемент с индексом key.
В противном случае возвратит FALSE.
Пример использования функции array_key_exists():
<?php
$search_array = array("first" => 1, "second" => 4);
if (array_key_exists("first", $search_array)) {
echo "The <I>first</I> element is in the array";
}
?>
В PHP 4.0.6. имя этой функции key_exists().
Функция поддерживается PHP 4 = 4.0.1, PHP 5
Работа с несколькими массивами
array_diff
Определение исключительного пересечения массивов.
Синтаксис:
array array_diff(array arr1, array arr2 [, array ...])
Данная функция возвращает массив, который содержит значения, имеющиеся только в массиве arr1 ( и не имеющиеся в любых других). При этом индексы сохраняются.
$arr1 = array("a" => "green", "red", "blue", "red");
$arr2 = array("b" => "green", "yellow", "red");
$result = array_diff($arr1, $arr2);
// $result = array("blue")
Повторение одного и того же значения "red" в массиве arr1 обрабатывается как одно значение.
Стоит отметить, что два элемента считаются одинаковыми, только если их строковое представление идентично. Т.е. (string) $elem1 === (string) $elem2.
Также стоит отметить, что данная функция корректно обрабатывает только одно измерение N-мерного массива. Если есть необходимость обрабатывать более глубокие уровни вложенности, можно использовать конструкцию array_diff($arr1[0], $arr2[0]);.
Функция поддерживается PHP 4 = 4.0.1, PHP 5
array_diff_assoc
Определение исключительного пересечения массивов с учетом индексов массивов.
Синтаксис:
array array_diff_assoc(array arr1, array arr2 [, array ...])
Данная функция возвращает массив, который содержит значения, имеющиеся только в массиве arr1 ( и не имеющиеся в любых других).Обратите внимание, что в отличии от функции array_diff(), при сравнении учитываются ключи.
Пример использования array_diff_assoc():
<?php
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>
Пример выведет следующее:
Array( [b] => brown [c] => blue [0] => red)
В приведенном примере пара "a" = "green" присутствует в обоих массивах, поэтому она не вошла в результирующий массив. В отличие от этого, значение red присутствует в результирующем массиве, т.к. в первом массиве это значение имело ключ 0, а во втором массиве оно имело ключ 1.
Две пары ключ = значение считаются равными, если они тождественны друг другу, т.е. (string) $elem1 === (string) $elem2.
Обратите внимание, что данная функция не позволяет напрямую сравнивать многомерные массивы. Хотя конечно можно сравнить вложенные массивы, используя, например, array_diff_assoc ($array1 [0], $array2 [0]);.
Функция поддерживается PHP 4 =4.3.0, PHP 5
array_diff_uassoc
Определение различия между массивами при помощи пользовательской функции с дополнительной проверкой ключей массива.
Синтаксис:
array array_diff_uassoc(array arr1, array arr2 [, array ..., callback key_compare_func])
Функция array_diff_uassoc() возвращает массив, который содержит значения, имеющиеся только в массиве arr1 ( и не имеющиеся в любых других).
Обратите внимание, что в отличии от функции array_diff(), при сравнении учитываются ключи. Сделано это при помощи пользовательской функции key_compare_func. Эта функция должна возвращать целое число, которое должно быть меньше нуля, если первый переданный ей аргумент меньше чем второй, равное нулю, если первый аргумент равен второму, и больше нуля, если первый аргумент больше второго. Эта функция отличается от array_diff_assoc(), где сравнение значений и индексов происходит автоматически.
Пример использования array_diff_uassoc():
<?php
function key_compare_func($a, $b)
{
if ($a === $b) {
return 0;
}
return ($a > $b)? 1:-1;
}
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_uassoc($array1, $array2, "key_compare_func");
?>
Пример выведет следующее:
Array( [b] => brown [c] => blue [0] => red)
В приведенном примере пара "a" = "green" присутствует в обоих массивах, поэтому она не вошла в результирующий массив. В отличие от этого, значение red присутствует в результирующем массиве, т.к. в первом массиве это значение имело ключ 0, а во втором массиве оно имело ключ 1.
Равенство индексов проверяется пользовательской функцией.
Обратите внимание, что данная функция не позволяет напрямую сравнивать многомерные массивы. Хотя конечно можно сравнить вложенные массивы, используя, например, array_diff_uassoc ($array1[0], $array2[0], "key_compare_func");.
Функция поддерживается PHP 5
array_udiff
Сравнивает массивы используя пользовательскую функцию.
Синтаксис:
array array_udiff( array array1, array array2 [, array ..., callback data_compare_func])
Функция array_udiff() возвращает массив, содержащий все значения массива array1, которые не присутствуют в других массивах, переданных в параметрах.
Стоит отметить, что ключи значений сохраняются.
Для сравнения значений массивов используется пользовательская функция data_compare_func. Она возвращает число, большее нуля, равное нулю или меньшее нуля, если первый аргумент, переданные ей в виде параметра, больше, равен или меньше второго параметра соответственно. Это отличается от функции array_diff(), где используется встроенная функция сравнения. Пример использования функции array_udiff_assoc():
<?php
class cr {
private $priv_member;
function cr($val)
{
$this->priv_member = $val;
}
function comp_func_cr($a, $b)
{
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
$result = array_udiff($a, $b, array("cr", "comp_func_cr"));
print_r($result);
?>
Этот пример выведет следующее:
Array( [0.5] => cr Object ( [priv_member:private] => 12 ) [0] => cr Object ( [priv_member:private] => 23 ))
Два значения будут сочтены равными, только если (string) $elem1 === (string) $elem2 (т.е. когда строки содержат одно и тоже).
Стоит отметить, что данная функция в случае многомерного массива использует для сравнения одного измерение. Если вы хотите пройтись по всем измерениям, стоит использовать конструкцию array_udiff($array1[0], $array2[0], "data_compare_func");
Функция поддерживается PHP 5
array_udiff_assoc
Сравнивает массивы используя пользовательскую функцию.
Синтаксис:
array array_udiff_assoc( array array1, array array2 [, array ..., callback data_compare_func])
Функция array_udiff_assoc() возвращает массив, содержащий все значения массива array1, которые не присутствуют в других массивах, переданные в параметрах. Стоит отметить, что ключи значений используются при сравнении в отличии от функций array_diff() и array_udiff().
Для сравнения значений массивов используется пользовательская функция. Этим данная функция отличается от array_diff_assoc(), которая использует внутреннюю функции для сравнения.
Пример использования функции array_udiff_assoc():
<?php
class cr {
private $priv_member;
function cr($val)
{
$this->priv_member = $val;
}
function comp_func_cr($a, $b)
{
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
$result = array_udiff_assoc($a, $b, array("cr", "comp_func_cr"));
print_r($result);
?>
Этот пример выведет следующее:
Array( [0.1] => cr Object ( [priv_member:private] => 9 ) [0.5] => cr Object ( [priv_member:private] => 12 ) [0] => cr Object ( [priv_member:private] => 23 ))
В нашем примере пара 1= new cr(4) присутствует в обеих массивах и по этому она не вошла в результирующий массив.
Для сравнения используется пользовательская функция. Она возвращает значение, меньшее нуля, равное нулю или большее нуля, если переданный ей первый параметр меньше второго, равен второму или больше второго соответственно.
Функция поддерживается PHP 5
array_udiff_uassoc
Сравнивает массивы используя пользовательскую функцию.
Синтаксис:
array array_udiff_uassoc ( array array1, array array2 [, array ..., callback data_compare_func, callback key_compare_func])
Функция array_udiff_uassoc() возвращает массив, содержащий все значения массива array1, которые не присутствуют в других массивах, переданные в параметрах. Стоит отметить, что ключи значений используются при сравнении в отличии от функций array_diff() и array_udiff().
Для сравнения значений массивов используется пользовательская функция data_compare_func. Этим данная функция отличается от array_diff_assoc(), которая использует внутреннюю функции для сравнения.
Сравнение ключей (индексов) происходит при помощи пользовательской функции key_compare_func. Этим данная функция отличается от array_udiff_assoc(), которая использует внутреннюю функции для сравнения.
Пример использования функции array_udiff_uassoc():
<?php
class cr {
private $priv_member;
function cr($val)
{
$this->priv_member = $val;
}
function comp_func_cr($a, $b)
{
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
function comp_func_key($a, $b)
{
if ($a === $b) return 0;
return ($a > $b)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
$result = array_udiff_uassoc($a, $b, array("cr", "comp_func_cr"), array("cr", "comp_func_key"));
print_r($result);
?>
Этот пример выведет следующее:
Array( [0.1] => cr Object ( [priv_member:private] => 9 ) [0.5] => cr Object ( [priv_member:private] => 12 ) [0] => cr Object ( [priv_member:private] => 23 ))
В нашем примере пара 1= new cr(4) присутствует в обеих массивах и по этому она не вошла в результирующий массив.
Для сравнения используется пользовательская функция. Она возвращает значение, меньшее нуля, равное нулю или большее нуля, если переданный ей первый параметр меньше второго, равен второму или больше второго соответственно.
Функция поддерживается PHP 5
array_intersect
Определение включительного пересечения массивов.
Синтаксис:
array array_intersect(array arr1, array arr2 [, array ...])
Функция array_intersect() возвращает массив, который содержит значения массива arr1, имеющиеся во всех остальных массивах. При этом индексы сохраняются.
Пример использования функции array_intersect():
<?php
$arr1 = array("a" => "green", "red", "blue");
$arr2 = array("b" => "green", "yellow", "red");
$result = array_intersect($arr1, $arr2);
print_r($result);
?>
Пример выведет:
Array( [a] => green [0] => red)
Функция поддерживается PHP 4 = 4.0.1, PHP 5
array_intersect_assoc
Функция возвращает пересечения значений массивов с сохранением индексов.
Синтаксис:
array array_intersect_assoc(array array1, array array2 [, array ...])
Функция array_intersect_assoc() возвращает массив, который содержит все значения array1, имеющиеся во всех остальных перечисленных массивах. В отличие от функции array_intersect() при сравнении ключи учитываются.
Пример использования функции array_intersect_assoc():
<?php
$array1 = array("a" => "яблоко", "b" => "груша", "c" => "дыня", "слива");
$array2 = array("a" => "яблоко", "апельсин", "слива");
$result_array = array_intersect_assoc($array1, $array2);
?>
Пример выведет следующее:
Array( [a] => яблоко)
Приведенный пример вывел только значение [a] = яблоко, т.к. это значение присутствовало и в первом и во втором массиве.
Значение дыня не выведено, т.к. в первом массиве у него был индекс 0, а во втором - 1
Функция поддерживается PHP 4 = 4.3.0, PHP 5
array_merge
Слияние массивов.
Синтаксис:
array array_merge(array arr1, array arr2 [, array ...])
Функция array_merge() призвана устранить все недостатки, присущие оператору + для слияния массивов. А именно, она сливает массивы, перечисленные в ее аргументах, в оди большой массив и возвращает результат. Т.е. значени одного массива присоединяются к значениям предыдущего.
Если в массивах встречаются одинаковые строковые ключи, то тогда значения, принадлежащие этим ключам, сливаются в один массив таким образом, чтобы если одно из значений в свою очередь является массивом, функция array_merge() сливает его с соответствующим значением в другом массиве.
Однако это не затрагивает числовые ключи: элементы с такими ключами помещаются в конец результирующего массива в любом случае.
Пример использования функции array_merge():
<?php
$array1 = array ("color" => "red", 2, 4);
$array2 = array ("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge ($array1, $array2);
print_r($result);
?>
Пример выведет следующее:
Array( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [shape] => trapezoid [4] => 4)
Другой пример использования функции array_merge():
<?php
$array1 = array();
$array2 = array(1 => "data");
$result = array_merge($array1, $array2);
print_r($result);
?>
Пример выведет следующее:
Array( [0] => data)
Стоит отметить, что числовые ключи были потеряны.
Если есть необходимость просто слить массивы вместе, используйте оператор +
<?php
$array1 = array();
$array2 = array(1 => "data");
$result = $array1 + $array2;
print_r($result);
?>
Пример выведет следующее:
Array( [1] => data)
Функция поддерживается PHP 4, PHP 5
array_merge_recursive
Рекурсивное слияние сложных массивов.
Синтаксис:
array array_merge_recursive(array arr1, array arr2 [, array ...])
Функция array_merge_recursive() объединяет элементы массивов, переданных в ее параметрах таким образом, что значения одного массива присоединяются к значениям предудущих.
Функция возвращает массив, состоящий из объединенных массивов.
Если массивы, переданные в параметрах этой функции, имеют одинаковые строковые ключи, тогда значения, соответствующие этим ключам, сливаются в один массив. При этом если одно из значений само является массивом, то оно будет слито с соответствующим значением в другом массиве.
Но если в массивах присутствуют одинаковые числовые ключи, то тогда значение такого ключа, упомянутое последним, не заменит исходное значение, а будет слито с ним.
Пример использования функции array_merge_recursive():
<?php
$arr1 = array("color" => array("favorite" =>"red"), 5);
$arr2 = array(10, "color" => array("favorite" =>"green", "blue"));
$result = array_merge_recursive($arr1, $arr2);
print_r($result_;
?>
Пример выведет:
Array( [color] => Array ( [favorite] => Array ( [0] => red [1] => green ) [0] => blue ) [0] => 5 [1] => 10)
Функция поддерживается PHP 4 =, PHP 5
Получение и удаление части массива
array_slice
Получение части массива.
Синтаксис:
array array_slice(array arr, int offset [, int lenght])
Функция array_slice() возвращает часть ассоциативного массива arr, начиная с элемента со смещением (номером) offset от начала и длиной lenght (если последний параметр не задан, до конца массива).
Параметры offset и lenght задаются по точно таким же правилам, как и аналогичные параметры в функции substr(). А именно, если offset0, то последовательность будет начинаться с элемента, имеющего позицию offset от начала массива, а если <0, то отсчет производится от конца массива. Надо отметить, что первый элемент имеет нулевую позицию, а последний (-1).
Если указать length>0, то это число возвращаемых в массиве элементов, а если length<0, то это позиция последнего возвращаемого элемента в массиве arr от его конца.
Пример использования функции array_slice():
<?php
$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 2); // "c", "d", "e"
$output = array_slice($input, 2, -1); // "c", "d"
$output = array_slice($input, -2, 1); // "d"
$output = array_slice($input, 0, 3); // "a", "b", "c"
?>
Функция поддерживается PHP 4, PHP 5
array_splice
Удаляет часть массива или заменяет ее частью другого массива.
Синтаксис:
array array_splice(array arr, int offset [, int lenght [, int replacement]])
Функция array_splice(), также как и array_slice(), возвращает подмасcив arr начиная с индекса offset максимальной длины lenght, но, вместе с тем, она делает и другое полезное действие. А именно, она заменяет только что указанные элементы на то, что находится в массиве replacement (или просто удаляет, если replacement не указан).
Если offset>0, то последовательность будет начинаться с элемента, имеющего позицию offset от начала массива, а если <0, то отсчет производится от конца массива. Надо отметить, что первый элемент имеет нулевую позицию, а последний (-1).
Если указать length>0, то это число возвращаемых в массиве элементов, а если length<0, то это позиция последнего возвращаемого элемента в массиве arr от его конца.
В качестве примера укажем следующие эквивалентыне замены:
array_push($input, $x, $y) array_splice($input, count($input), 0, array($x, $y))
array_pop($input) array_splice($input, -1)
array_shift($input) array_splice($input, -1)
array_unshift($input, $x, $y) array_splice($input, 0, 0, array($x, $y))
$a[$x] = $y array_splice($input, $x, 1, $y)
Пример использования функции array_splice():
<?php
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
// $input is now array("red", "green")
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, -1);
// $input is now array("red", "yellow")
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, count($input), "orange");
// $input is now array("red", "orange")
$input = array("red", "green", "blue", "yellow");
array_splice($input, -1, 1, array("black", "maroon"));
// $input is now array("red", "green",
// "blue", "black", "maroon")
$input = array("red", "green", "blue", "yellow");
array_splice($input, 3, 0, "purple");
// $input is now array("red", "green",
// "blue", "purple", "yellow");
?>
Функция поддерживается PHP 4, PHP 5
Вставка / удаление элементов
array_pad
Добавляет в массив несколько элементов.
Синтаксис:
array array_pad(array input, int pad_size, mixed pad_value)
Функция array_pad() возвращает копию массива input, в который были добавлены элементы с значениями pad_value, так, что число элементов в получившемся массиве будет равно pad_size.
Если pad_size0, то элементы будут добавлены в конец массива, а если <0 - то в начало.
В случае, если значение pad_size меньше элементов в исходном массиве input, то никакого добавления не произойдет, и функция вернет исходный массив input.
Пример использования функции array_pad():
$arr = array(12, 10, 4);
$result = array_pad($arr, 5, 0);
// $result = array(12, 10, 4, 0, 0);
$result = array_pad($arr, -7, -1);
// $result = array(-1, -1, -1, -1, 12, 10, 4)
$result = array_pad($arr, 2, "noop");
// не добавит
Функция поддерживается PHP 4, PHP 5
array_pop
Извлекает и удаляет последние элементы массива.
Синтаксис:
mixed array_pop(array arr);
Функция array_pop() извлекает последний элемент из массива arr и возвращает его, удалив после этого. С помощью этой функции мы можем строить конструкции, напоминающие стек. Если массив arr был пуст, или это не массив, функция возвращает пустую строку NULL.
После использования функции array_pop() курсор массива устанавливается в начало.
Пример использования функции array_pop():
<?php
$stack = array("orange", "apple", "raspberry");
$fruits = array_pop($stack);
print_r($stack);
print_r($fruits);
?>
Пример выведет следующее:
Array( [0] => orange [1] => banana [2] => apple)
Функция поддерживается PHP 4, PHP 5
array_push
Добавляет один или несколько элементов в конец массива.
Синтаксис:
int array_push(array arr, mixed var1 [, mixed var2, ..])
Функция array_push() добавляет к массиву arr элементы var1, var2 и т.д. Она присваивает им числовые индексы - точно так же, как это происходит для стандартных []. Если вам нужно добавить всего один элемент, наверное, проще будет воспользоваться этим оператором:
array_push($Arr,1000); // вызываем функцию
$Arr[]=100; // то же самое, но короче
Пример использования функции array_push():
<?php
$stack = array("orange", "banana");
array_push($stack, "apple", "raspberry");
print_r($stack);
?>
Пример выведет следующее:
Array( [0] => orange [1] => banana [2] => apple [3] => raspberry)
Обратите внимание, что функция array_push() воспринимает массив, как стек, и добавляет элементы всегда в его конец.
Функция поддерживается PHP 4, PHP 5
array_shift
Извлекает и удаляет первый элемент массива.
Синтаксис:
mixed array_shift(array arr)
Функция array_shift() извлекает первый элемент массива arr и возвращает его. Она сильно напоминает array_pop(), но только получает начальный, а не конечный элемент, а также производит довольно сильную "встряску" всего массива: ведь при извлечении первого элемента приходится корректировать все числовые индексы у всех оставшихся элементов, т.к. все последующие элементы массива сдвигаются на одну позицию вперед. Строковые ключи массива не изменяются.
Если массив arr пустой или он не является массивом, функция возвращает NULL.
После использования этой функции указатель массива становится в начало.
Пример использования функции array_shift():
<?php
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
print_r($stack);
?>
Данный пример выведет следующее:
Array( [0] => banana [1] => apple [2] => raspberry)
а переменная $fruit будет иметь значение "orange"
Функция поддерживается PHP 4, PHP 5
array_unshift
Добавляет одно или несколько значений в начало массива.
Синтаксис:
int array_unshift(list arr, mixed var1 [,mixed var2, ...])
Функция array_unshift() добавляет переданные значения var в начало массива arr. Порядок расположения новых элементов в массиве сохраняется. Все цифровые индексы массива будут изменены таким образом, чтобы она начинались с нуля. Все строковые индексы массива не изменяются.
Функция возвращает новое количество элементов в массиве.
Пример использования функции array_unshift():
<?php
$queue = array("orange", "banana");
array_unshift($queue, "apple", "raspberry");
?>
Теперь переменная $queue будет иметь следующие элементы:
Array( [0] => apple [1] => raspberry [2] => orange [3] => banana)
Функция поддерживается PHP 4, PHP 5
array_unique
Удаляет дублирующие значения в массиве.
Синтаксис:
array array_unique(array arr)
Функция array_unique() возвращает массив, составленный из всех уникальных значений массива arr вместе с их ключами, путем удаления всех дублирующих значений. В результирующий массив помещаются первые встретившиеся пары ключ=>значение. Индексы сохраняются.
Пример использования функции array_unique():
<?php
$input = array("a" => "green", "red", "b" =>
"green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>
Пример выведет следующее:
Array( [a] => green [0] => red [1] => blue)
Пример использования функции array_unique(): Сравнение типов данных
<?php
$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);
var_dump($result);
?>
Пример выведет следующее:
array(2) { [0] => int(4) [2] => string(1) "3"}
Функция поддерживается PHP 4 >= 4.0.1, PHP 5
array_chunk
Функция разбивает массив на части.
Синтаксис:
array array_chunk(array arr, int size [, bool preserve_keys])
Функция array_chunk() разбивает исходный массив arr на несколько массивов, длина которых задается числом size. Если размерность исходного массива не делится ровно на size частей, то последний массив будет иметь меньшую размерность.
Функция array_chunk() возвращает многомерный массив, индексами которого начинаются от 0 и до кол-ва полученных массивов, а значения - полученные в результате разбивки массивы.
Необязательный параметр preserve_keys указывает, стоит ли сохранять ключи исходного массива или нет. Если этот параметр равен false (значение по умолчанию), то индексы полученных массивов будут заданы числами начиная с нуля. Если же параметр равен true, то ключи исходного массива сохраняются.
Пример использования функции array_chunk():
$array = array("1-ый элемент",
"2-ой элемент",
"3-ий элемент",
"4-ый элемент",
"5-ый элемент");
print_r(array_chunk($array, 2));
print_r(array_chunk($array, 2, TRUE));
Пример выведет следующее:
Array( [0] => Array ( [0] => 1-ый элемент [1] => 2-ой элемент ) [1] => Array ( [0] => 3-ий элемент [1] => 4-ый элемент ) [2] => Array ( [0] => 5-ый элемент ))Array( [0] => Array ( [0] => 1-ый элемент [1] => 2-ой элемент ) [1] => Array ( [2] => 3-ий элемент [3] => 4-ый элемент ) [2] => Array ( [4] => 5-ый элемент ))
Функция поддерживается PHP 4 >= 4.2.0, PHP 5
array_fill
Функция заполняет массив определенными значениями.
Синтаксис:
array array_fill(int start_index, int num, mixed value)
Функция array_fill() возвращает массив, который содержит значения, указанные в параметре value размерностью num начиная с элемента, указанного в параметре start_index.
Пример использования array_diff_uassoc():
<?php
$a = array_fill(5, 6, 'banana');
print_r($a);
?>
Пример выведет следующее:
Array( [5] => banana [6] => banana [7] => banana [8] => banana [9] => banana [10] => banana)
Функция поддерживается PHP 4 >= 4.2.0, PHP 5
array_filter
Функция применяет фильтр к массиву, используя пользовательскую функцию.
Синтаксис:
array array_filter(array input [, callback callback])
Функция array_filter() возвращает массив, который содержит значения, имеющиеся в массиве input отфильтрованные в соответсвтии с результатами работы пользовательской функции callback.
В случае, если исходный массив input является ассоциативным массивом, в результирующем массиве индексы сохраняются.
Пример использования функции array_filter():
<?php
function odd($var) {
return ($var % 2 == 1);
}
function even($var) {
return ($var % 2 == 0);
}
$array1 = array ("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array (6, 7, 8, 9, 10, 11, 12);
echo "Нечетные :n";
print_r(array_filter($array1, "odd"));
echo "Четные :n";
print_r(array_filter($array2, "even"));
?>
Пример выведет следующее:
Нечетные :Array( [a] => 1 [c] => 3 [e] => 5)Четные :Array( [0] => 6 [2] => 8 [4] => 10 [6] => 12)
Стоит отметить, что вместо имени фильтрующей функции можно указать массив, который содержит ссылку на объект и имя метода.
Также стоит отметить, что при обработке массива фукцией array_filter() его нельзя изменять: добавлять, удалять элементы или обнулять массив, т.к. это может привести к некоррекстной работе функции.
Функция поддерживается PHP 4 >= 4.0.6, PHP 5
array_map
Применение пользовательской функции ко всем элементам указанных массивов.
Синтаксис:
array array_map(mixed callback, array arr1 [, array ...])
Функция array_map() возвращает массив, который содержит элементы всех указанных массивов после обработки пользовательской функцией callback.
Количество параметров, передаваемых пользовательской функции, должно совпадать с количеством массивов, переданных функции array_map().
Пример испольльзования функции array_map(): Обработка одного массива
<?php
function cube($n) {
return $n*$n*$n;
}
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
?>
Приведенный пример выведет следующее:
Array( [0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125)
Пример испольльзования функции array_map(): Обработка нескольких массивов
<?php
function show_Spanish($n, $m) {
return "Число $n по-испански - $m";
}
function map_Spanish($n, $m) {
return array ($n => $m);
}
$a = array(1, 2, 3, 4, 5);
$b = array("uno", "dos", "tres", "cuatro", "cinco");
$c = array_map("show_Spanish", $a, $b);
print_r($c);
$d = array_map("map_Spanish", $a , $b);
print_r($d);
?>
Приведенный пример выведет следующее:
// printout of $cArray( [0] => Число 1 по-испански - uno [1] => Число 2 по-испански - dos [2] => Число 3 по-испански - tres [3] => Число 4 по-испански - cuatro [4] => Число 5 по-испански - cinco)// printout of $dArray( [0] => Array ( [1] => uno ) [1] => Array ( [2] => dos ) [2] => Array ( [3] => tres ) [3] => Array ( [4] => cuatro ) [4] => Array ( [5] => cinco ))
Обычно функцию array_map() применяют к массивам, имеющим одинаковую размерность. Если массивы имеют разную длину, то меньшие из них дополняются элементами с пустыми значениями.
Следует отметить, что если вместо имени обрабатывающей функции задать null, то будет создан массив массивов.
Пример испольльзования функции array_map(): Создание массива массивов
<?php
$a = array(1, 2, 3, 4, 5);
$b = array("one", "two", "three", "four", "five");
$c = array("uno", "dos", "tres", "cuatro", "cinco");
$d = array_map(null, $a, $b, $c);
print_r($d);
?>
Приведенный пример выведет следующее:
Array( [0] => Array ( [0] => 1 [1] => one [2] => uno ) [1] => Array ( [0] => 2 [1] => two [2] => dos ) [2] => Array ( [0] => 3 [1] => three [2] => tres ) [3] => Array ( [0] => 4 [1] => four [2] => cuatro ) [4] => Array ( [0] => 5 [1] => five [2] => cinco ))
Функция поддерживается PHP 4 >= 4.0.6, PHP 5
Переменные и массивы
list
Заносит элементы массива в переменные.
Синтаксис:
void list ( mixed ...)
Наподобие array(), функция list() не совсем функция, а языковая конструкция. Она используется для формирования списка переменных.
Замечание: list() работает только с цифровыми индексами массива и принимает ключи элементов начиная с 0.
Пример использования функции list():
<?php
$info = array("coffee", "brown", "caffeine");
// Выведем все переменные
list($drink, $color, $power) = $info;
echo "$drink is $color and $power makes it special.n";
// Выведем первый и последний
list($drink, , $power) = $info;
echo "$drink has $power.n";
// Выведем только третий
list( , , $power) = $info;
echo "I need $power!n";
?>
Пример использования функции list():
<table>
<tr>
<th>Employee name</th>
<th>Salary</th>
</tr>
<?php
$result = mysql_query("SELECT id, name, salary FROM employees", $conn);
while (list($id, $name, $salary) = mysql_fetch_row($result)) {
echo " <tr>n" .
" <td><a href="info.php?id=$id">$name</a></td>n" .
" <td>$salary</td>n" .
" </tr>n";
}
?>
</table>
Пример использования функции list(): Индексы
<?php
$info = array("coffee", "brown", "caffeine");
list($a[0], $a[1], $a[2]) = $info;
var_dump($a);
?>
array(3) { [2]=> string(8) "caffeine" [1]=> string(5) "brown" [0]=> string(6) "coffee"}
Функция поддерживается PHP 3, PHP 4, PHP 5
compact
Упаковывает в массив переменные из текущего контекста.
Синтаксис:
array compact(mixed varname1 [, mixed $varname2, ...])
Функция compact() упаковывает в массив переменные из текущего контекста (глобального или контекста функции), заданные своими именами в varname1, $varname2 и т.д. При этом в массиве образуются пары с ключами, равными содержимому varnameN, и значениями соответствующих переменных.
Число аргументов может быть неопределенное.
Если в аргументе указано имя несуществующей переменной, он пропускается. Действие этой функции противоположно функции extract().
Пример использования функции compact():
<?php
$city = "San Francisco";
$state = "CA";
$event = "SIGGRAPH"";
$location_vars = array("city", "state");
$result = compact("event", "nothing_here", $location_vars);
?>
В результате выполнения кода переменная $result имеет значение:
Array( [event] => SIGGRAPH [city] => San Francisco [state] => CA)
Почему же тогда параметры функции обозначены как mixed? Дело в том, что они могут быть не только строками, но и списками строк. В этом случае функция последнего перебирает все элементы этого списка, и упаковывает те переменные из текущего контекста, имена которых она встретила. Более того - эти списки могут, в свою очередь, также содержать списки строк, и т.д. Правда, последнее используется достаточно редко.
Пример использования функции compact():
<?php
$a="Test";
$b="Text";
$c="CCC";
$d="DDD";
$List=array("b",array("c","d"));
$A=compact("a",$List);
?>
Теперь:
// теперь $A===array("a"=>"Test", "b"=>"Text",
"c"=>"CCC", "d"=>"DDD")
Функция поддерживается PHP 4, PHP 5
extract
Импорт элементов массива в переменные.
Синтаксис:
int extract (array var_array [, int extract_type [, string prefix]])
Функция extract() используется для импортирования значений массива в строку. Эта функция берет ассоциативный массив var_array, использую ключ элемента как имя переменной, а значение элемента как значение полученной переменной. Для создания переменных из пары ключ = значение можно также использовать необязательные параметры extract_type и prefix.
Замечание: начиная с PHP версии 4.0.5 эта функция возвращала количество извлеченных переменных.
Функция extract() проверяет, действительно ли каждый ключ массива может быть названием переменной. Она также проверяет на наличие одинаковых названий получаемых переменных. В случае, если обнаруживаются недействительные или числовые ключи, поведение функции предопределяет параметр extract_type, который может принимать следующие значения:
Пример использования функции extract():
<?php
/* Предположим, что $var_array массив,
полученный при помощи функции wddx_deserialize */
$size = "large";
$var_array = array("color" => "blue",
"size" => ""medium",
"shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$color, $size, $shape, $wddx_sizen";
?>
Пример выведет:
blue, large, sphere, medium
Здесь переменная $size не была переписана, т.к. мы указали параметр EXTR_PREFIX_SAME. Если указать EXTR_SKIP, тогда переменная $wddx_size даже не была бы создана. Если указать EXTR_OVERWRITE, то переменная $size имела бы значение "medium". Если EXTR_PREFIX_ALL - то в результате были бы созданы переменные $wddx_color, $wddx_size, и $wddx_shape.
Лучше всего использовать ассоциативные массивы. Массивы с цифровыми ключами не могут быть использованы в этой функции, если установлены флаги EXTR_PREFIX_ALL или EXTR_PREFIX_INVALID.
Функция поддерживается PHP 3 = 3.0.7, PHP 4, PHP 5
Строковые функции
chr
Возвращает один символ с определенным кодом.
Синтаксис:
string chr(int ascii)
Возвращает строку из одного символа с кодом $code. Эта функция полезна для вставки каких-либо непечатаемых символов в строку - например, кода нуля или символа прогона страницы, а также при работе с бинарными файлами.
<?
// Сначало создаем массив того, что мы собираемся выводить,
// не заботясь о форматировании (дизайне) информации
for($i=0, $x=0; $x<16; $x++) {
for($y=0; $y<16; $y++) {
$Chars[$x][$y]=array($i,chr($i));
$i++;
}
}
// Теперь выводим накопленную информацию, используя идеологию
// вставки участков кода в HTML-документ
?>
<table border=1 cellpadding=1 cellspacing=0>
<?for($y=0; $y<16; $y++) {?>
<tr>
<?for($x=0; $x<16; $x++) {?>
<td>
<?=$Chars[$x][$y][0]?>:
<b><tt><?=$Chars[$x][$y][1]?></tt></b>
</td>
<?}?>
</tr>
<?}?>
</table>
ord
Возвращает ascii код символа.
Синтаксис:
int ord(string str)
Эта функция возвращает ASCII код первого символа строки str.Например, ord(chr($n)) всегда равно $n - конечно, если $n заключено между нулем и 255.
Функции для работы с одиночными символами
chr
Возвращает один символ с определенным кодом.
Синтаксис:
string chr(int ascii)
Возвращает строку из одного символа с кодом $code. Эта функция полезна для вставки каких-либо непечатаемых символов в строку - например, кода нуля или символа прогона страницы, а также при работе с бинарными файлами.
<?
// Сначало создаем массив того, что мы собираемся выводить,
// не заботясь о форматировании (дизайне) информации
for($i=0, $x=0; $x<16; $x++) {
for($y=0; $y<16; $y++) {
$Chars[$x][$y]=array($i,chr($i));
$i++;
}
}
// Теперь выводим накопленную информацию, используя идеологию
// вставки участков кода в HTML-документ
?>
<table border=1 cellpadding=1 cellspacing=0>
<?for($y=0; $y<16; $y++) {?>
<tr>
<?for($x=0; $x<16; $x++) {?>
<td>
<?=$Chars[$x][$y][0]?>:
<b><tt><?=$Chars[$x][$y][1]?></tt></b>
</td>
<?}?>
</tr>
<?}?>
</table>
ord
Возвращает ascii код символа.
Синтаксис:
int ord(string str)
Эта функция возвращает ASCII код первого символа строки str.Например, ord(chr($n)) всегда равно $n - конечно, если $n заключено между нулем и 255.
Функции отрезания пробелов
trim
Удаляет из заданной строки начальные и конечные пробельные символы.
Синтаксис:
string trim(string str)
Возвращает копию str, только с удаленными ведущими и концевыми пробельными символами. Под пробельными символами надо понимать и пробел.
Например, вызов trim(" testn ") вернет строку "test".
Поиск в тексте
strchr
Поиск первого вхождения символа в строку.
Синтаксис:
string strchr(string haystack, string needle)
Данная функция работает идентично функции strstr().
strstr
Поиск первого вхождения подстроки в строку.
Синтаксис:
string strstr(string haystack, string needle)
Функция strstr() возвращает участок строки, заданной в параметре haystack, начиная с первого фрагмента, указанного в параметре needle и до конца.
В случае неудачи возвращает false.
Данная функция чувствительна к регистру.
В случае, если needle не является строкой, то значение преобразуется в целое и используется как код искомого символа.
$email = "mailname@mail.ru";
$domain = strstr($email, "@");
// или
$domain = strstr($email, ord("@"))
echo $domain;
// выведет @mail.ru
stristr
Нахождение первого вхождения подстроки, не учитывая регистр.
Синтаксис:
string stristr(string haystack, string needle)
Функция stristr() возвращает участок строки, заданной в параметре haystack, начиная с первого фрагмента, указанного в параметре needle и до конца.
В случае неудачи возвращает false.
Данная функция нечувствительна к регистру.
В случае, если needle не является строкой, то значение преобразуется в целое и используется как код искомого символа.
strrchr
Поиск последнего вхождения подстроки.
Синтаксис:
string strrchr(string haystack, string needle)
Функция strrchr() возвращает участок строки, заданной в параметре haystack, начиная с последнего фрагмента, указанного в параметре needle и до конца.
В случае неудачи возвращает false.
Данная функция чувствительна к регистру.
В случае, если needle не является строкой, то значение преобразуется в целое и используется как код искомого символа.
// получим последний каталог в $PATH
$dir = substr(strrchr($PATH, ":"), 1);
// а здесь получим все после последнего перевода строки
$text = "text 1nText2nText3";
echo substr(strrchr($text, 10), 1);
strpos
Находит позицию первого вхождения подстроки в заданной строке.
Синтаксис:
int strpos(string where, string what [, int fromwhere])
Функция strpos() пытается найти в строке were подстроку what и в случае успеха возвращает позицию (индекс) этой подстроки в строке. Первый символ строки имеет индекс 0. Необязательный параметр fromwhere можно задавать, если поиск нужно вести не с начало строки, а с какой-то другой позиции. В этом случае следует эту позицию передать в fromwhere. Если подстроку не удалось найти, функция возвращает false.
Если параметр what не строка, в этом случае его значение преобразуется в целое и используется как код искомого символа.
if(strpos($text, "a")===false) echo "Не найдено!";
// Проверка: три знака равенства
strrpos
Находит в заданной строке последнюю позицию, в которой находится заданный фрагмент.
Синтаксис:
int strrpos(string where, string what)
Данная функция ищет в строке where последнюю позицию, в которой встречался символ what (если what - строка из нескольких символов, то выявляется только первый из них, остальные не играют никакой роли).
Если искомый символ стоит первый в строке или его вообще нет, функция возвратит 0.
В случае, если искомый символ не найден, возвращает false.
substr_count
Находит количество вхождений фрагмента в строку.
Синтаксис:
int substr_count(string where, string what)
Функция substr_count() возвращает число фрагментов what, присутствующих в строке where.
echo substr_count("www.spravkaweb.ru", ".");
// Выведет 3
strspn
Определяет присутствие начальных символов в строке.
Синтаксис:
int strspn(string str1, string str2)
Функция strspn() возвращает длину начального фрагмента строки str1, состоящего полностью из символов, которые есть в строке str2.
echo strspn("www.spravkaweb.ru", "abc");
// Выведет 3
strcspn
Определяет отсутствие начальных символов в строке.
Синтаксис:
int strcspn(string str1, string str2)
Функция strspn() возвращает длину начального фрагмента строки str1, состоящего полностью не из символов, которые есть в строке str2.
Функции сравнения
strcmp
Сравнивает строки.
Синтаксис:
int strcmp(string str1, string str2)
Эта функция сравнивает две строки посимвольно (точнее, бобайтово) и возвращает:
Так как сравнение идет побайтово, то регистр символов влияет на результаты сравнений.
strncmp
Сравнивает начала строк.
Синтаксис:
int strncmp(string str1, string str2, int len)
Эта функция отличается от strcmp() тем, что сравнивает не все слово целиком, а первые len байтов. В случае, если len меньше длины наименьшей из строк, то строки сравниваются целиком.
Эта функция сравнивает две строки посимвольно (точнее, бобайтово) и возвращает:
Так как сравнение идет побайтово, то регистр символов влияет на результаты сравнений.
strcasecmp
Сравнивает строки без учета регистра.
Синтаксис:
int strcasecmp(string str1, string str2)
То же самое, что и strcmp(), только при работе не учитывается регистр букв.
$str1 = "Привет!";
$str2 = "привет!";
if(!strcesecmp($str1, $str2))
echo "$str1 == $str2 при сравнении строк без учета регистра";
strncasecmp
Сравнивает начала строк без учета регистра.
Синтаксис:
int strncasecmp(string str1, string str2, int len)
Функция strncasecmp() является комбинацией функций strcasecmp() и strncmp().
strnatcmp
Производит "естественное" сравнение строк.
Синтаксис:
int strnatcmp(string str1, string str2)
Данная функция имитирует сравнение строк, которое использовал бы человек.
$arr1 = $arr2 = array("img12.png", "img10.png", "img2.png", "img1.png");
echo "Обычная сортировкаn";
usort($arr1, "strcmp");
print_r($arr1);
echo "nЕстенственная сортировкаn";
usort($arr2, "strnatcmp");
print_r($arr2);
Данный скприпт выведет следующее:
Обычная сортировкаArray( [0] => img1.png [1] => img10.png [2] => img12.png [3] => img2.png)Естественная сортировкаArray( [0] => img1.png [1] => img2.png [2] => img10.png [3] => img12.png)
strnatcasecmp
Производит "естественное" сравнение строк без учета регистра.
Синтаксис:
int strnatcasecmp(string str1, string str2)
То же, что и strnatcmp(), только игнорирует регистр.
similar_text
Производит определение схожести двух строк.
Синтаксис:
int similar_text(string firsrt, string second [, double percent])
Функция similar_text() вычисляет схожесть двух строк по алгоритму, описанному Оливером (Oliver [1993]). Но вместо стека (как в псевдокоде Оливера) она использует рекурсивные вызовы.
Сложность алгоритма делает функцию медленной, и ее скорость пропорциональна (N^3), где N - длина наибольшей строки.
Функция возвращает число символов, совпавших в обеих строках. При передаче по ссылке третьего необязательного параметра в нем сохраняется процент совпадения строк.
levenshtein
Определение различия Левенштейна двух строк.
Синтаксис:
int levenshtein(string str1, string str2)int levenshtein(string str1, string str2, int cost_ins, int cost_rep, int cost_del)int levenshtein(string str1, string str2, function cost)
"Различие Левенштейна" - это минимальное чило символов, которое требовалось бы заменить, вставить или удалить для того, чтобы превратить строку str1 в str2. Сложность алгоритма пропорциональна произведению длин строк str1 и str2, что делает функцию более быстродействующей, чем similar_text().
Первая форма функции возвращает число необходимых операций над символами строк для трансформации str1 в str2.
Вторая форма имеет три дополнительных параметра: стоимость операции вставки, замены и удаления, что делает ее более адаптированной для вычисления, но при этом менее быстродействующей. Возвращается интегральный показатель сложности трансформации.
Третий вариант позволяет указать функцию, используемую для расчета сложности трансформации.
Функция cost вызывается со следующими аргументами:
Вызываемая функция должна будет возвратить стоимость этой операции.
Если длина одной из строк более 255 символов, функция levenshtein() возвращает -1, но такая длина более чем достаточна.
Форматирование и вывод строк
Выводит строку, значение переменной или выражение.
Синтаксис:
print(string arg)
Функция print() выводит аргумент arg, в качестве которого может быть переменная или выражение.
echo
Производит вывод одного или нескольких значений.
Синтаксис:
echo(string arg1, string [argn]...)
Функция echo() выводит значения перечисленных параметров.
echo() - фактически языковая конструкция, поэтому для нее не обязательны скобки, даже если используется несколько аргументов.
echo "Перенос на следующую строку,
имеющийся в коде, сохраняется
и используется при выводе".
"чтобы избежать этого используйте".
"оператор конкатенации";
printf
Вывод отформатированной строки.
Синтаксис:
int printf(string format [, mixed args, ...]);
Делает то же самое, что и sprintf(), только результирующая строка не возвращается, а направляется в браузер пользователя.
sprintf
Производит форматирование строки с подстановкой переменных.
Синтаксис:
sprintf($format [,args, ...])
Эта функция возвращает строку, составленную на основе строки форматирования, содержащей некоторые специальные символы, которые будут впоследствии заменены на значения соответствующих переменных из списка аргументов.
Строка форматирования $format может включать в себя команды форматирования, предваренные символом %. Все остальные символы копируются в выходную строку как есть. Каждый спецификатор формата (то есть, символ % и следующие за ним команды) соответствуют одному, и только одному параметру, указанному после параметра $format. Если же нужно поместить в текст % как обычный символ, необходимо его удвоить:
echo sprintf("The percentage was %d%%",$percentage);
Каждый спецификатор формата включает максимум пять элементов (в порядке их следования после символа %):
Вот как можно указать точность представления чисел с плавающей точкой:
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money выведет "123.1"...
$formatted = sprintf ("%01.2f", $money);
// echo $formatted выведет "123.10"!
Вот пример вывода целого числа, предваренного нужным количеством нулей:
$isodate=sprintf("%04d-%02d-%02d",$year,$month,$day);
sscanf
Производит интерпретацию строки согласно формату и занесение значений в переменные.
Синтаксис:
mixed sscanf(string str, string format [, string var1 ...])
Функция sscanf() является противоположностью функции printf(). Она интерпретирует строку str согласно формату format, аналогично спецификации printf(). При указании только двух аргументов полученные значения возвращаются в массиве.
// получение серийного номера
$serial = sscanf("SN/235-0001", "SN/%3d-%4d");
echo $serial[0]*10000+$serial[1]; // выводит: 2350001
// и даты изготовления
$date = "January 01 2000";
list($month, $day, $year) = sscanf($date, "%s %d %d");
echo "Дата: $year-".substr($month,0,3)."-$dayn";
// выводит: 2000-Jan-01
При указании дополнительных необязательных параметров (их следует передавать по ссылке) функция возвращает их число. Те переменные, которые не получают значений, в возвращаемом значении не учитываются.
// генерируем XML запись из строки
$auth = "765tLewis Carroll";
$n = sscan($auth,"%dt%s %s", &$id, &$first, &$last);
echo "<author id="$id">
<firstname>$first</firrstname>
<surname>$last</surname>
</author>n";
Составление/разбиение строк
substr
Возвращает участок строки с определенной длиной.
Синтаксис:
string substr(string str, int start [,int length])
Возвращает участок строки str, начиная с позиции start и длиной length. Если length не задана, то подразумевается подстрока от start до конца строки str. Если start больше, чем длина строки, или же значение length равно нулю, то возвращается пустая подстрока.
Однако эта функция может делать и еще довольно полезные вещи. К примеру, если мы передадим в start отрицательное число, то будет считаться, что это число является индексом подстроки, но только отсчитываемым от конца str (например, -1 означает "начинается с последнего символа строки").
Параметр length, если он задан, тоже может быть отрицательным. В этом случае последним символом возвращаемой подстроки будет символ из str с индексом length, определяемым от конца строки.
$str = substr("abcdef", 1); // возвратит "bcdef"
$str = substr("abcdef", 1, 3); // возвратит "bcd"
$str = substr("abcdef", -1); // возвратит "f"
$str = substr("abcdef", -2); // возвратит "ef"
$str = substr("abcdef", -3, 1); // возвратит "d"
$str = substr("abcdef", 1, -1); // возвратит "bcde"
str_repeat
Повторяет строку определенное количество раз.
Синтаксис:
string str_repeat(string str, int number)
Функция "повторяет" строку str number раз и возвращает объединенный результат.
echo str_repeat("test!",3); // выводит test!test!test!
str_pad
Дополняет строку другой строкой до определенной длины.
Синтаксис:
string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])
Аргумент input задает исходную строку. Аргумент pad_length задает длину возвращаемой строки. Если он имеет значение меньше, чем исходная строка, то никакого добавления не производится.
При помощи необязательного аргумента pad_string можно указать, какую строку использовать в качестве заполнителя (по умолчанию - пробелы).
При помощи необязательного аргумента pad_type можно указать, с какой стороны следует дополнять строку: справо, слево или с обеих сторон.
Этот аргумент может принимать следующие значения:
$str = "Aaaaa";
echo str_pad($str, 10);
// возвратит "Aaaaa"
echo str_pad($str, 10, "-=", STR_PAD_LEFT);
// возвратит "-=-=-Aaaaa"
echo str_pad($str, 10, "_", STR_PAD_BOTH)
// возвратит "_Aaaa_"
chunk_split
Возвращает фрагмент строки.
Синтаксис:
string chunk_split(string str [, int chunklen [, string end]])
Функция chunk_split() возвращает строку, в которой между каждым блоком строки str длиной chunklen (по умолчанию 76) вставляется последовательность разделителей end (по умолчанию: "rn").
Данная функция может быть полезна при конвертировании в формат "base64" для соответствия правилам RFC 2045.
// отформатируем $data, используя семантику RFC 2045
$str = chunk_split(base64_encode($data));
Эта функция работает значительно быстрее, чем ereg_replace().
strtok
Возвращает строку по частям.
Синтаксис:
string strtok(string arg1, string arg2)
Функция возвращает часть строки arg1 до разделителя arg2. При последующих вызовах возвращается следующая часть до следующего разделителя, и так до конца строки. При первом вызове функция принимает два аргумента: исходную строку arg1 и разделитель arg2. При каждом последующем вызове аргумент arg1 указывать не надо, иначе будет возвращаться первая часть строки. Когда возвращать больше нечего, функция вернет false. Если часть строки состоит из 0 или из пустой строки, то функция также вернет false.
$str="This is an example№string№ Aaa";
$tok = strtok($str, " ");
while($tok) {
echo "$tok";
$tok = strtok(" №");
};
// выведет: "This" "is" "an" "example" "string"
Надо заметить, что в качестве разделителей указывается последовательность символов, каждый из которых в отдельности может являться разделителем, но когда в строке последовательно встречаются два или более разделителей, функция возвращает пустую строку (что может прекратить цикл обработки, как в примере).
explode
Производит разделение строки в массив.
Синтаксис:
array explode(string seperator, string str [, int limit])
Функция explode() возвращает массив строк, каждая из которых соответствует фрагменту исходной строки str, находящемуся между разделителями, указанными аргументом separator.
Необязательный параметр limit указывает максимальное количество элементов в массиве. Оставшаяся неразделенная часть будет содержаться в последнем элементе.
$str = "Path1 Path2 Path3 Path4";
$str_exp = explode(" ", $str);
// теперь $str_exp = array([0] => Path1, [1] => Path2,
// [2] => Path3, [3] => '', [4] => Path4)
implode
Производит объединение массива в строку.
Синтаксис:
string implode(string glue, array pieces)
Функция implode() возвращает строку, которая содержит последовательно все элементы массива, заданного в параметре pieces, между которыми вставляется значение, указанное в параметре glue.
$str = implode(":", $arr);
join
Производит объединение массива в строку.
Синтаксис:
string join(string glue, array pieces)
То же, что и implode().
Работа с блоками текста
str_replace
Заменяет в исходной строке одни подстроки на другие.
Синтаксис:
string str_replace(string from, string to, string str)
Эта функция заменяет в строке str все вхождения подстроки from (с учетом регистра) на to и возвращает результат. Исходная строка, переданная третьим параметром, при этом не меняется.
Также эта функция может работать с двоичными строками.
substr_replace
Заменяет в исходной строке одни подстроки на другие.
Синтаксис:
string substr_replace(string str, string replacement, int start [, int lemgth])
Эта функция возвращает строку str, в которой часть от символа с позицией start и длиной length (или до конца, если аргумент длины не указан) заменяется строкой replacement.
Если значение start положительно, отсчет производится от начала строки str, иначе - от конца (-1 - последний символ строки).
Если значение length неотрицательное, тогда оно указывает длину заменяемого фрагмента. Если оно отрицательно, то это число символов от конца строки str до последнего символа заменяемого фрагмента (со знаком минус).
wordwrap
Разбивает исходный текст на строки с определенными завершающими символами.
Синтаксис:
string wordwrap(string str [, int width [, string break [, int cut]]])
Эта функция разбивает блок текста str на несколько строк, завершаемых символами break, так, чтобы на одной строке было не более width букв. Разбиение происходит по границе слова, так что текст остается читаемым.
strtr
Комплексная замена в строке.
Синтаксис:
string strtr(string str, string from, string to)string strtr(string str, array from)
В первом случае функция strtr() возвращает строку str, у которой каждый символ, присутствующий в строку from, заменяется на корреспондирующий из строки to. В случае, если строки from и to различной длины, то лишние конечные символы длинной строки игнорируются.
Во втором случае функция strtr() возвращает строку, в которой фрагменты строки str заменяются на соответствующие индексам значения элементов массива from. При этом функция пытается заменить сначало наибольшие фрагменты исходной строки и не выполняет замену в уже модифицированных частях строки. Таким образом, теперь мы можем выполнить несколько замен сразу:
$Subs = array(
"<name>" => "Larry",
"<time>" => date("d.m.Y")
);
$st="Привет, <name>! Сейчас <time";
echo strtr($st,$Subs);
А вот как можно "отменить" действие функции HtmlSpecialChars():
$Trans=array_flip(get_html_translation_table());
$st=strtr($st, $Trans);
В результате мы из строки, в которой все спецсимволы заменены на их HTML-эквиваленты, получим исходную строку.
stripslashes
Удаление обратных слешей.
Синтаксис:
string stripslashes(string str);
Заменяет в строке str некоторые предваренные слешем символы на их однокодовые эквиваленты. Это относится к следующим символам: ", ", .
stripcslashes
Преобразование специальных символов в их двоичное представление.
Синтаксис:
string stripcslashes(string str);
Возвращает строку, в которой те специальные символы, которые закомментированы (для визуального отображения) обратным слешем, преобразуются в их естественное двоичное представление. Распознаются C-подобные записи, например: n, r ..., восьмеричные и шестнадцатеричные последовательности.
addslashes
Добавление слешей перед специальными символами строки.
Синтаксис:
string addslashes(string str);
Вставляет слеши только перед следующими символами:", " и . Функцию очень удобно использовать при вызове eval().
addcslashes
Форматирование строки слешами в С-представление.
Синтаксис:
string addcslashes(string str, string charlist);
Функция addcslashes() возвращает строку str, в которую вставлены символы обратного слеша "" перед перечисленными в строке-списке charlist символами. Это позволяет преобразовать непечатные символы в их визуальное С-представление.
quotemeta
Цитирование метасимволов.
Синтаксис:
string quotemeta(string str);
Возвращает строку, в которую добавлены обратные слеши "" перед каждым из следующих символов:. \ + * ? [ ^ ] ( $ )
Может использоваться для подготовки шаблонов в регулярных выражениях.
strrev
Производит реверс строки.
Синтаксис:
string strrev(string str)
функция strrev() возвращает строку str "задом наперед".
Функции для преобразования символов
nl2br
Заменяет символы перевода строки.
Синтаксис:
string nl2br(string string)
Заменяет в строке все символы новой строки \n на <br>\n и возвращает результат. Исходная строка не изменяется. Обратите внимание на то, что символы \r, которые присутствуют в конце строки текстовых файлов Windows, этой функцией никак не учитываются, а потому остаются на старом месте.
strip_tags
Удаляет из строки теги.
Синтаксис:
string strip_tags(string str [, string allowable_tags])
Эта функция удаляет из строки все HTML- и PHP-теги и возвращает результат.
Незавершенные или фиктивные теги вызывают ошибку.
В параметре allowable_tags можно передать теги, которые не следует удалять из строки. Они должны перечисляться вплотную друг к другу.
$st="
<b>Жирный текст</b>
<tt>Моноширный текст</tt>
<a href=http://spravkaweb.ru>Ссылка</a>";
echo "Исходный текст: $st";
echo "<hr>После удаления тегов: ".striptags($st,"<a><b>").
"<hr>";
Запустив этот пример, мы сможем заметить, что теги <a> и <b> не были удалены (ровно как и их парные закрывающие), в то время как <tt> исчез.
get_meta_tags
Функция ищет и обрабатывает все теги <META>.
Синтаксис:
array get_meta_tags(string filename, int use_include_path)
Функция открывает файл и ищет в нем все теги <META> до тех пор, пока не встретится закрывающий тег </head>.
Если очередной тег <META> имеет вид:
<meta name="название" content="содержимое">
то пара название=>содержимое добавляется в результирующий массив, который под конец и возвращается.
Спецсимволы в значении атрибута filename заменяются на знак подчеркивания "_", а алфавитные символы преобразуются в нижний регистр.
Функция удобно использовать для быстрого получения всех метатегов из указанного файла.
Если необязательный параметр use_include_path установлен, то поиск файла осуществляется не только в текущем каталоге, но и во всех тех, которые назначены для поиска инструкциями include и require.
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 приведено в функции htmlspecialchars().
$trans = get_html_translation_table(HTML_ENTITIES);
$str = "<A & B>";
$encoded = strtr($str, $strans);
// $encoded = "&lt; A & B >"
Иногда удобно использовать функцию array_flip() для изменения направления транслитерации.
$trans = array_flip($trans);
$original = strtr($encoded, $trans);
htmlspecialchars
Производит преобразование спецсимволов в HTML-представление.
Синтаксис:
string HtmlSpecialChars(string str [, int quote_style]);
Основное назначение этой функции - гарантировать, что в выводимой строке ни один участок не будет воспринят как тэг.
Заменяет в строке некоторые символы (такие как амперсанд, кавычки и знаки "больше" и "меньше") на их HTML-эквиваленты,так, чтобы они выглядели на странице "самими собой". Самое типичное применение этой функции - формирование параметра value в различных элементах формы, чтобы не было никаких проблем с кавычками, или же вывод сообщения в гостевой книге, если вставлять теги пользователю запрещено.
При помощи необязательного атрибута quote_style можно указать, что делать с кавычками:
$str = htmlspecialchars("<a href=index.php>Главная</a>", ENT_QUOTES);
htmlentities
Производит конвертацию символов, имеющих HTML-представление.
Синтаксис:
string htmlentities(string str [, int quote_style]);
Эта функция похожа на htmlspecialchars(), но только в ней производиться не выборочная трансляция, а полная - для всех символов, которые могут иметь эквивалентные HTML-представления.
При помощи необязательного атрибута quote_style можно указать, что делать с кавычками:
hebrev
Конвертация логического текста Hebrew в отображаемый.
Синтаксис:
string hebrev(string hebrew_text [, int max_chars_per_line]);
Необязательный аргумент max_chars_per_line указывает число символов на строку вывода. Функция пытается избежать разрыва слова.
hebrevc
Аналог функции hebrev() с расстановкой переносов.
Синтаксис:
string hebrevc(string hebrew_text [, int max_chars_per_line]);
Функция hebrevc() сходна с hebrev() с тем отличием, что она преобразует символы перевода строк "n" в "<br>n".
Необязательный аргумент max_chars_per_line указывает число символов на строку вывода. Функция пытается избежать разрыва слов.
quoted_printable_decode
Преобразование цитированной строки в 8-битную.
Синтаксис:
string quoted_printable_decode(string str);
Функции изменения регистра
strtolower
Производит преобразование символов строки в нижний регистр.
Синтаксис:
string strtolower(string str);
Преобразует строку в нижний регистр. Возвращает результат перевода.
Надо заметить, что при неправильной настройке локали функция будет выдавать, мягко говоря, странные результаты при работе с буквами кириллицы.
$str = "HeLLo World";
$str = strtolower($str);
echo $str;
// выведет hello world
strtoupper
Производит преобразование заданной строки в верхний регистр.
Синтаксис:
string strtoupper(string str);
Переводит строку в верхний регистр. Возвращает результат преобразования. Эта функция хорошо работает с английскими буквами, но с русскими может чудить.
$str = "Hello World";
$str = strtoupper($str);
echo $str;
// выведет HELLO WORLD
ucfirst
Производит преобразование первого символа строки в верхний регистр.
Синтаксис:
string ucfirst(string str);
Возвращает строку, у которой первый символ заглавный.
Символы кириллицы могут быть неправильно конвертированы.
$str = "hello world";
$str = ucfirst($str);
echo $str;
// выведет Hello world
ucwords
Производит преобразование первого символа каждого слова строки в верхний регистр.
Синтаксис:
string ucwords(string str);
Возвращает строку, у которой первый символ каждого слова в строке заглавный.
Под словом здесь понимается участок строки, которому предшествует пробельный символ: пробел, переход на новую строку, прогонка страницы, возврат каретки, горизонтальная и вертикальная табуляция.
Символы кириллицы могут быть неправильно конвертированы.
$str = "hello world";
$str = ucfirst($str);
echo $str;
// выведет Hello World
Установка локали (локальных настроек)
setlocale
Установка региональных настроек.
Синтаксис:
string SetLocale(string category, string locale);
Функция setlocale устанавливает текущую локаль, с которой будут работать функции преобразования регистра символов, вывода даты-времени и т.д. Вообще говоря, для каждой категории функций локаль определяется отдельно и выглядит по-разному. То, какую именно категорию функций затронет вызов setlocale(), задается в параметре category. Он может принимать следующие строковые значения:
Теперь поговорим о параметре locale. Как известно, каждая локаль, установленная в системе, имеет свое уникальное имя, по которому к ней можно обратиться. Именно оно и фиксируется в этом параметре. Однако, есть два важных исключения из этого правила. Во-первых, если величина locale равна пустой строке "", то устанавливается та локаль, которая указана в глобальной переменной окружения с именем, совпадающем с именем категории category (или LANG - она практически всегда присутствует в Unix). Во-вторых, если в этом параметре передается 0, то новая локаль не устанавливается, а просто возвращается имя текущей локали для указанного режима.
setlocale("LC_CTYPE","ru_SU.KOI*-R");
// Здесь вызов устанавливает таблицу замены
// регистра букв в соответствии с кодировкой KOI8-R.
Преобразование кодировок
convert_cyr_string
Преобразует строку из одной кодировки кириллицы в другую.
Синтаксис:
string convert_cyr_string(string str, string from, string to);
Функция переводит строку str из кодировки from в кодировку to. Конечно, это имеет смысл только для строк, содержащих "русские" буквы, т.к. латиница во всех кодировках выглядит одинаково. Разумеется, кодировка from должна совпадать с истинной кодировкой строки, иначе результат получится неверным. Значения from и to - одиночный символ, определяющий кодировку:
Функция работает достаточно быстро, так что ее вполне можно применять для перекодировки писем в нужную форму перед их отправкой по электронной почте.
bin2hex
Производит преобразование символьных данных в шестнадцатеричный вид.
Синтаксис:
string bin2hex(string str)
Функция bin2hex() возвращает строковое шестнадцатеричное представление символьно-байтовых данных, содержащихся в строке str.
Конвертация производиться побайтово, старший полубайт указывается первым.
Функции URL
parse_url
Обрабатывает URL и возвращает его компоненты.
Синтаксис:
array parse_url(string url);
Эта функция возвращает ассоциативный массив, включающий множество различных существующих компонентов URL. Они включают "scheme", "host", "port", "user", "pass", "path", "query" и "fragment".
parse_str
Заносит строки URL в переменные.
Синтаксис:
void parse_str(string str [, array arr]);
Функция parse_str() интерпретирует строку str, как если бы эта строка содержала в себе переменные и их значения и передавалась бы в URL. Наша функция устанавливает для этих переменных значения.
Если задан второй необязательный параметр, то значения, найденные при помощи функции parse_str(), сохраняться не в глобальных переменных, а в элементах указанного массива.
$str = "name[]=Vasia&name[]=Pupkin&id=12645&mail=vasia@mail.ru&url=www.vasia.ru";
parse_str($str);
parse_str($str, $arr);
echo $id; // выведет 1264
echo $name[0]; // выведет Vasia
echo $name[1]; // выведет Pupkin
print_r($arr);
выведет
Array( [name] => Array ( [0] => Vasia [1] => Pupkin ) [id] => 12645 [mail] => vasia@mail.ru [url] => www.vasia.ru)
urlencode
Кодирование строки в URL
Синтаксис:
string urlencode (string str)
Возвращает строку, в которой все не алфавитно-цифровые символы (за исключением дефиса "-" и знака подчеркивания "_" и точки ".") заменены последовательностями: знак процента (%), за которым следуют две шестнадцатеричные цифры (обозначающие код символа), а символ пробела заменен на знак "+". Именно таким образом кодируются все данные, посылаемые HTML-формами. Медиа-тип этого кодирования обозначается как application/x-www-form-urlencoded; он отличается от стандарта кодирования RFC 1738 (rawurlencode()) тем, что по историческим причинам пробелы заменяются на знак плюс. Эта функция удобна при кодировании строки для использования в строке запроса, являющейся частью URL, и при передаче переменных на следующую страницу:
<?php
echo '<a href="mycgi?foo=', urlencode($userinput), '">';
?>
<?php
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="mycgi?' . htmlentities($query_string) . '">';
?>
urldecode
Декодирование строки из URL
Синтаксис:
string urldecode (string str)
Декодирует в строке последовательности %## (так в URL кодируются спецсимволы).
<?php
$a = explode('&', $QUERY_STRING);
$i = 0;
while ($i < count($a)) {
$b = split('=', $a[$i]);
echo 'Value for parameter ', htmlspecialchars(urldecode($b[0])),
' is ', htmlspecialchars(urldecode($b[1])), "<br />\n";
$i++;
}
?>
rawurlencode
Кодирование URL.
Синтаксис:
string RawUrlEncode(string str);
Функция RawUrlEncode() возвращает строку, в которой все не алфавитно-цифровые символы (за исключением дефиса "-", знака подчеркивания "_" и точки ".") заменены последовательностями: знак процента (%), за которым следуют две шестнадцатеричные цифры, которые обозначают код символа. Это кодирование нужно для того, чтобы буквенные символы не обрабатывались в качестве разделителей строки URL и не искажались при передаче в сетях.
echo "<A href=ftp://user:".rawurlencode($mypasswd).
"@ftp.my.com/x.txt>"; // передача пароля в гиперссылке
rawurldecode
Производит декодирование URL.
Синтаксис:
string rawurldecode(string str);
Эта функция возвращает строку, в которой последовательности с знаком процента (%) и следующими за ним двумя шестнадцатеричных числа преобразует в символы, соответствующими этому коду. Аналогична urldecode(), но не воспринимает + как пробел.
$str="foo%20bar%40baz";
echo rawurldecode($str);
// выведет foo bar@baz
base64_encode
Кодирует данные в кодировке MIME base64.
Синтаксис:
string base64_encode(string data);
base64_encode() возвращает data закодированные в кодировке base64. Эта кодировка разработана для того, чтобы передавать двоичные данные через транспортные слои, которые не содержат восьмой бит, такие как почтовые тела. Данные в кодировке Base64 занимают примерно на 33% больше места, чем оригинал.
base64_decode
Декодирует данные, закодированные в кодировке MIME base64.
Синтаксис:
string base64_decode(string encoded_data);
base64_decode() декодирует encoded_data и возвращает оригинал данных. Возвращаемые данные могут быть двоичными.
Работа с бинарными данными
pack
Пакетирование данных в двоичную строку.
Синтаксис:
string pack(string format [,mixed $args, ...]);
Функция pack() упаковывает заданные аргументы в бинарную строку, которая затем и возвращается. Формат параметров, а также их количество, задается при помощи строки $format, которая представляет собой набор однобуквенных спецификаторов форматирования - наподобие тех, которые указываются в sprintf(), но только без знака %. После каждого спецификатора может стоять число, которое отмечает, сколько информации будет обработано данным спецификатором. А именно, для форматов a,A,h и H число задает, какое количество символов будет помещено в бинарную строку из тех, что находится в очередном параметре-строке при вызове функции (то есть, определяет размер поля для вывода строки). В случае @ оно определяет абсолютную позицию, в которую будут помещены следующие данные. Для всех остальных спецификаторов следующие за ними числа задают количество аргументов, на которые распространяется действие данного формата. Вместо числа можно указать *, в этом случае подразумевается, что спецификатор действует на все оставшиеся данные.
Вот полный список спецификаторов формата:
// Целое, целое, все остальное - сиволы
$bindata = pack("nvc*", 0x1234, 0x5678, 65, 66);
После выполнения приведенного кода в строке $bindata будет содержаться 6 байтов в такой последовательности:0x12, 0x34, 0x78, 0x56, 0x41, 0x42 (в шестнадцатиричной системе счисления).
unpack
Распаковывает данные из двоичной строки.
Синтаксис:
array unpack(string format, string data);
Распаковывает данные из двоичной строки в массив согласно формату. Возвращает массив, содержащий распакованные элементы.
$array = unpack("c2chars/nint", $binarydata);
Возникающий в результате массив будет содержать "chars1", "chars2" и "int".
Строковые суммы и хеш-функции
strlen
Возвращает длину строки.
Синтаксис:
int strlen(string str)
Возвращает просто длину строки, т.е., сколько символов содержится в str.
Строка может содержать любые символы, в том числе и с нулевым кодом. Функция strlen() будет правильно работать и с такими строками.
count_chars
Возвращает информацию о символах строки.
Синтаксис:
mixed count_chars(string str [, int mode])
Функция count_chars() подсчитывает частоту встречаемости каждого байта (0-255) в строке str и возвращает в массиве результат согласно необязательному аргументу mode. mode может принимать следующие значения:
md5
Получение строки-хеша MD5.
Синтаксис:
string md5(string str);
Возвращает хеш-код строки str, основанный на алгоритме корпорации RSA Data Security под названием "MD5 Message-Digest Algorithm".
Хеш-код - это просто строка, практически уникальная для каждой из строк str. То есть вероятность того, что две разные строки, переданные в str, дадут нам одинаковый хеш-код, стремиться к нулю.
В то же время, если длина строки str может достигать нескольких тысяч символов, то ее MD5-код занимает максимум 32 символа.
crc32
Получение полиминала строки crc32.
Синтаксис:
int crc32(string str);
Функция crc32() вычисляет 32-битную контрольную сумму строки str. То есть, результат ее работы - 32-битное (4-байтовое) целое число.
Обычно эту функцию используют для проверки целостности переданных данных.
Эта функция работает гораздо быстрее md5(), но в то же время выдает гораздо менее надежные "хеш-коды" для строки. Так что, теперь, чтобы получить методом случайного подбора для двух разных строк одинаковые "хеш-коды", вам потребуется не триллион лет работы самого мощного компьютера, а всего лишь год-другой.
crypt
Производит симметричное шифрование.
Синтаксис:
string crypt(string str [,string salt]);
В аргументе str задается строка, которую надо зашифровать.
Хеш-код для одной и той же строки, но с различными значениями salt (Кстати, это должна быть обязательно двухсимвольная строка) дает разные результаты. Если параметр salt пропущен, PHP сгенерирует его случайным образом.
В системах, которые поддерживают несколько алгоритмов шифрования, следующие константы устанавливаются равными 1 или 0, в зависимости от того, поддерживается ли данный алгоритм или нет:
Т.к. данная функция использует односторонний алгоритм шифрования, то функции дешифрования не имеется.
metaphone
Производит вычисление метафон-хеша.
Синтаксис:
string metaphone(string str);
Данная функция схожа по действию с soundex(), вычисляет код произношения слова, переданного в строке str, но с повышенной точностью вычисления, т.к. использует правила произношения английского языка.
Возвращаемое строковое значение может быть переменной длины.
soundex
Вычисления хеша сходности произношения.
Синтаксис:
string soundex(string str);
Функция soundex() используется для проверки правописания, когда приблизительно известно как звучит слово, но не известно, как оно пишется, и имеется словарь (база данных), относительно которого можно осуществить проверку.
Возвращается строка из 4 символов: первая буква слова и 3 цифры.
soundex("Euler") == soundex("Ellery") == "E460";
soundex("Gauss") == soundex("Ghosh") == "G200";
soundex("Hilbert") == soundex("Heilbronn") == "H416";
soundex("Knuth") == soundex("Kant") == "K530";
soundex("Lloyd") == soundex("Ladd") == "L300";
soundex("Lukasiewicz") == soundex("Lissajous") == "L222";
XML
Введение
SimpleXML предоставляет очень простой в восприятии, интуитивно-понятный доступ к XML-документам, позволяющий совершать разнообразные операции с элементами XML-документа и их атрибутами.
Требования
SimpleXML присутствует в PHP начиная с версии 5.
Установка
SimpleXML установлен в PHP по умолчанию. Для того, чтобы отключить это расширение, перекомпилируйте PHP с ключом --disable-simplexml.
Примеры
Практически все примеры используют XML-документ. Вместо того, чтобы каждый раз повторять содержание XML-документа в каждом примере, мы поместим XML-документ в файл, который будет читать при помощи функции simplexml_load_file().
<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<title>PHP: Behind the Parser</title>
<characters>
<character>
<name>Ms. Coder</name>
<actor>Onlivia Actora</actor>
</character>
<character>
<name>Mr. Coder</name>
<actor>El Act&#211;r</actor>
</character>
</characters>
<plot>
So, this language. It's like, a programming language. Or is it a
scripting language? All is revealed in this thrilling horror spoof
of a documentary.
</plot>
<rating type="thumbs">7</rating>
<rating type="stars">5</rating>
</movie>
</movies>
XML;
?>
Простоту работы с SimpleXML можно продемонстрировать извлечением текста из заданного элемента XML-документа.
Пример 2. Получение текста в <plot>
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
echo $xml->movie[0]->plot; // "So this language. It's like..."
?>
Пример 3. Работа с группой элементов в SimpleXML
Можно применять циклы для получения дочерних элементов заданного элемента (если дочерние элементы существуют).
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
/* Для каждого элемента <movie> мы отображаем элемент . */
foreach ($xml->movie as $movie) {
echo $movie->plot, '<br />';
}
?>
Пример 4. Использование атрибутов
Выше было показано как работать с элементами XML-документа и их значениями. SimpleXML также имеет доступ к атрибутам элементов. Атрибуты указанного элемента доступны как ассоциативный массив данного элемента.
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
/* Получение доступа к атрибутам элементов <rating> для первого кино.*/
foreach ($xml->movie[0]->rating as $rating) {
switch((string) $rating['type']) { // Возвращает атрибуты как элементы массива
case 'thumbs':
echo $rating, ' thumbs up';
break;
case 'stars':
echo $rating, ' stars';
break;
}
}
?>
Пример 5. Сравнение элементов и их атрибутов с текстовыми значениями
Для того, чтобы сравнивать элемент или атрибут со строковыми значениями, или передавать содержание элемента или атрибута в функцию, которая использует строковое значение передаваемого параметра, вы должны использовать элементы и атрибуты как строки с признаком (string). В противном случае PHP воспримет передаваемое значение как объект.
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
if ((string) $xml->movie->title == 'PHP: Behind the Parser') {
print 'Мой любимый фильм.';
}
htmlentities((string) $xml->movie->title);
?>
Пример 6. Использование Xpath
В SimpleXML включена поддержка запросов Xpath. Поиск всех элементов :
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
foreach ($xml->xpath('//character') as $character) {
echo $character->name, ' съиграл ', $character->actor, '<br />';
}
?>
'//' служит групповым символом. Чтобы задать абсолютный путь, требуется убрать один слеш.
Пример 7. Задание новых значений
Данные в SimpleXML не могут быть постоянными. Объект учитывает изменения всех его элементов.
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
$xml->movie[0]->characters->character[0]->name = 'Miss Coder';
echo $xml->asXML();
?>
Результатом вышеуказанного примера будет новый XML-документ, идеентичный оригиналу за исключением того, что в новом XML-документе будет вместо Ms. Coder будет Miss Coder.
Пример 8. Взаимодействие с DOM
PHP имеет механизм конвертации XML-документов из формата SimpleXML в DOM и обратно. Следующий пример показывает как конвертировать DOM-элемент в SimpleXML-элемент:
<?php
$dom = new domDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!$dom) {
echo 'Ошибка преобразования документа';
exit;
}
$s = simplexml_import_dom($dom);
echo $s->book[0]->title;
?>
Содержание:
SimpleXMLElement->asXML -- Возвращает правильно сформированный XML-документ
SimpleXMLElement->attributes -- Возвращает атрибуты элемента.
SimpleXMLElement->children -- Возвращает дочерние элементы для заданного элемента
SimpleXMLElement->xpath -- Выполняет Xpath-запрос к XML-данным
simplexml_import_dom -- Возвращает объектSimpleXMLElement, созданный из DOM-объекта.
simplexml_load_file -- Интерпретирует XML-файл в объект
simplexml_load_string -- Интерпретирует строку с XML в объект
SimpleXML
Введение
SimpleXML предоставляет очень простой в восприятии, интуитивно-понятный доступ к XML-документам, позволяющий совершать разнообразные операции с элементами XML-документа и их атрибутами.
Требования
SimpleXML присутствует в PHP начиная с версии 5.
Установка
SimpleXML установлен в PHP по умолчанию. Для того, чтобы отключить это расширение, перекомпилируйте PHP с ключом --disable-simplexml.
Примеры
Практически все примеры используют XML-документ. Вместо того, чтобы каждый раз повторять содержание XML-документа в каждом примере, мы поместим XML-документ в файл, который будет читать при помощи функции simplexml_load_file().
<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
<movie>
<title>PHP: Behind the Parser</title>
<characters>
<character>
<name>Ms. Coder</name>
<actor>Onlivia Actora</actor>
</character>
<character>
<name>Mr. Coder</name>
<actor>El Act&#211;r</actor>
</character>
</characters>
<plot>
So, this language. It's like, a programming language. Or is it a
scripting language? All is revealed in this thrilling horror spoof
of a documentary.
</plot>
<rating type="thumbs">7</rating>
<rating type="stars">5</rating>
</movie>
</movies>
XML;
?>
Простоту работы с SimpleXML можно продемонстрировать извлечением текста из заданного элемента XML-документа.
Пример 2. Получение текста в <plot>
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
echo $xml->movie[0]->plot; // "So this language. It's like..."
?>
Пример 3. Работа с группой элементов в SimpleXML
Можно применять циклы для получения дочерних элементов заданного элемента (если дочерние элементы существуют).
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
/* Для каждого элемента <movie> мы отображаем элемент . */
foreach ($xml->movie as $movie) {
echo $movie->plot, '<br />';
}
?>
Пример 4. Использование атрибутов
Выше было показано как работать с элементами XML-документа и их значениями. SimpleXML также имеет доступ к атрибутам элементов. Атрибуты указанного элемента доступны как ассоциативный массив данного элемента.
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
/* Получение доступа к атрибутам элементов <rating> для первого кино.*/
foreach ($xml->movie[0]->rating as $rating) {
switch((string) $rating['type']) { // Возвращает атрибуты как элементы массива
case 'thumbs':
echo $rating, ' thumbs up';
break;
case 'stars':
echo $rating, ' stars';
break;
}
}
?>
Пример 5. Сравнение элементов и их атрибутов с текстовыми значениями
Для того, чтобы сравнивать элемент или атрибут со строковыми значениями, или передавать содержание элемента или атрибута в функцию, которая использует строковое значение передаваемого параметра, вы должны использовать элементы и атрибуты как строки с признаком (string). В противном случае PHP воспримет передаваемое значение как объект.
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
if ((string) $xml->movie->title == 'PHP: Behind the Parser') {
print 'Мой любимый фильм.';
}
htmlentities((string) $xml->movie->title);
?>
Пример 6. Использование Xpath
В SimpleXML включена поддержка запросов Xpath. Поиск всех элементов :
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
foreach ($xml->xpath('//character') as $character) {
echo $character->name, ' съиграл ', $character->actor, '<br />';
}
?>
'//' служит групповым символом. Чтобы задать абсолютный путь, требуется убрать один слеш.
Пример 7. Задание новых значений
Данные в SimpleXML не могут быть постоянными. Объект учитывает изменения всех его элементов.
<?php
include 'example.php';
$xml = simplexml_load_string($xmlstr);
$xml->movie[0]->characters->character[0]->name = 'Miss Coder';
echo $xml->asXML();
?>
Результатом вышеуказанного примера будет новый XML-документ, идеентичный оригиналу за исключением того, что в новом XML-документе будет вместо Ms. Coder будет Miss Coder.
Пример 8. Взаимодействие с DOM
PHP имеет механизм конвертации XML-документов из формата SimpleXML в DOM и обратно. Следующий пример показывает как конвертировать DOM-элемент в SimpleXML-элемент:
<?php
$dom = new domDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!$dom) {
echo 'Ошибка преобразования документа';
exit;
}
$s = simplexml_import_dom($dom);
echo $s->book[0]->title;
?>
Содержание:
SimpleXMLElement->asXML -- Возвращает правильно сформированный XML-документ
SimpleXMLElement->attributes -- Возвращает атрибуты элемента.
SimpleXMLElement->children -- Возвращает дочерние элементы для заданного элемента
SimpleXMLElement->xpath -- Выполняет Xpath-запрос к XML-данным
simplexml_import_dom -- Возвращает объектSimpleXMLElement, созданный из DOM-объекта.
simplexml_load_file -- Интерпретирует XML-файл в объект
simplexml_load_string -- Интерпретирует строку с XML в объект
asXML
SimpleXMLElement-asXML
SimpleXMLElement-asXML -- Возвращает правильно сформированный XML-документ
Описание
mixed SimpleXMLElement->asXML ( [string filename] )
Метод asXML формирует данные в XML версии 1.0.
Список параметров
Возвращаемые значения
Если имя файла задано, то метод запишет XML данные в указанный файл. В противном случае метод возвратит XML-данные в виде строки.
Замечания
Если в исходном документе в заголовках была указана кодировка XML-документа при помощи параметра encoding, то метод asXML возвратит XML-документ в указанной кодировке. Изменение кодировки XML-документа при помощи расширения SIMPLEXML невозможно.
Примеры
Пример 1. Вывести XML
<?php
$string = <<<XML
<a>
<b>
<c>text</c>
<c>stuff</c>
</b>
<d>
<c>code</c>
</d>
</a>
XML;
$xml = simplexml_load_string($string);
echo $xml->asXML(); // <?xml ... <a><b><c>text</c><c>stuff</c> ...
?>
Метод asXML также может работать с Xpath:
Пример 2. Использование метода asXML() в работе с Xpath
<?php
// Продолжение примера, указанного выше.
/* Поиск <a><b><c> */
$result = $xml->xpath('/a/b/c');
while(list( , $node) = each($result)) {
echo $node->asXML(); // <c>text</c> и <c>stuff</c>
}
?>
attributes
SimpleXMLElement-attributes
SimpleXMLElement-attributes -- Возвращает атрибуты элемента.
Описание
SimpleXMLElement simplexml_element->attributes ( [string data] )
Эта функция возвращает названия и значения атрибутов выбранного xml-элемента.
Замечание: SimpleXML содержит правило добавления итеративных свойств к большинству методов. Они не могут быть просмотрены с испольванием var_dump() или каких-либо других средств анализа объектов.
Пример 1. Интепретация XML-строки
<?php
$string = <<<XML
<users>
<user name="Evgen" age="27">admin@spravkaweb.ru</user>
</users>
XML;
$xml = simplexml_load_string($string);
foreach($xml->users[0]->attributes() as $a => $b) {
echo $a,'="',$b,"\"\n";
}
?>
Данный пример выведет:
name="Evgen"age="27
children
SimpleXMLElement-children
SimpleXMLElement-children -- Возвращает дочерние элементы для заданного элемента
Описание
SimpleXMLElement simplexml_element->children ( [string nsprefix] )
Данный метод находит дочерние элементы для заданного элемента.
Замечание: SimpleXML содержит правило добавления итеративных свойств к большинству методов. Они не могут быть просмотрены с использованием var_dump() или каких-либо других средств анализа объектов.
Пример 1. Использование метода children()
<?php
$xml = simplexml_load_string(
'<sites>
<site name="spravkaweb.ru">
<site name="links.spravkaweb.ru" />
<site name="forum.spravkaweb.ru" />
<site name="server.spravkaweb.ru" />
</site>
<site name="yandex.ru">
<site name="money.yandex.ru" />
<site name="map.yandex.ru" />
<site name="market.yandex.ru" />
</site>
</sites>');
echo '<ul>';
foreach ($xml->children() as $site) {
echo '<dt>' . $site['name'];
foreach ($site->children() as $subsite) {
echo '<dd>' . $subsite['name'];
}
}
echo '</ul>';
?>
Данный пример выведет:
spravkaweb.ru links.spravkaweb.ru forum.spravkaweb.ru server.spravkaweb.ruyandex.ru money.yandex.ru map.yandex.ru market.yandex.ru
xpath
SimpleXMLElement-xpath
SimpleXMLElement-xpath -- Выполняет Xpath-запрос к XML-данным
Описание
array SimpleXMLElement->xpath ( string path )
Метод xpath ищет дочерние элементы элемента SimpleXML, путь к которому указан в параметре path. Метод возвращает массив объектов SimpleXMLElement.
Пример 1. Xpath
<?php
$string = <<<XML
<a>
<b>
<c>text</c>
<c>stuff</c>
</b>
<d>
<c>code</c>
<b>
<c>plain</c>
</b>
</d>
</a>
XML;
$xml = simplexml_load_string($string);
/* Поиск по <a><b><c> */
$result = $xml->xpath('/a/b/c');
foreach ($result as $node) {
echo '/a/b/c: ' . $node . '<BR>';
}
/* Относительные дорожки также работают ... */
$result = $xml->xpath('b/c');
foreach ($result as $node) {
echo 'b/c: ' . $node . '<BR>';
}
?>
Данный скрипт выведет:
/a/b/c: text/a/b/c: stuffb/c: textb/c: stuff
Два результата в данном случае одинаковы.
simplexml_import_dom
simplexml_import_dom
(PHP 5)
simplexml_import_dom -- Возвращает объект SimpleXMLElement, созданный из DOM-объекта.
Описание
SimpleXMLElement simplexml_import_dom ( DOMNode node [, string class_name] )
Данная функция берет объект DOM и создает на его основе объект SimpleXML. Этот новый объект может быть использован как нормальный объект SimpleXML. Если во время создания объекта произошли ошибки, метод вернет false.
Пример 1. Import DOM
<?php
$dom = new domDocument;
$dom->loadXML('<sites><site><url>spravkaweb.ru</url></site></sites>');
if (!$dom) {
echo 'Ошибка парсинга документа!';
exit;
}
$s = simplexml_import_dom($dom);
echo $s->site[0]->url; // spravkaweb.ru
?>
simplexml_load_file
simplexml_load_file
(PHP 5)
simplexml_load_file -- Интерпретирует XML-файл в объект
Описание
object simplexml_load_file ( string filename [, string class_name [, int options]] )
Эта функция интерпретирует файл filename с правильно сформированными XML-данными в объект SimpleXMLElement. Если в XML-данных имеются ошибки, функция возвратит FALSE.
Вы можете использовать необязательный параметр class_name в функции simplexml_load_file() для того, чтобы функция вернула объект указанного класса. При этом класс должен быть расширением класса SimpleXMLElement.
Начиная с PHP 5.1.0 и Libxml 2.6.0 вы можете использовать необязательный параметр options, спецификация которого описана в additional Libxml parameters.
Замечание: Libxml 2 преобразовывает URL к правильному виду. Т.е. если вы хотите присвоить переменной а значение b&c в URL-строке, вам не обязательно делать: simplexml_load_file(rawurlencode('http://example.com/?a=' . urlencode('b&c'))). Начиная с PHP 5.1.0 это делается в автоматическом режиме.
Пример 1. Интерпретация XML документа
<?php
// Файл test.xml содержит XML документ с корневым элементом
// и вложенным элементом title /[root]/title.
if (file_exists('test.xml')) {
$xml = simplexml_load_file('test.xml');
var_dump($xml);
} else {
exit('Ошибка открытия test.xml.');
}
?>
Этот пример выведет следующее:
SimpleXMLElement Object( [title] => Тестовый заголовок ...)
В данном примере вы можете обратиться к элементу title следующим образом: $xml-title.
Смотрите также:
simplexml_load_string()
simplexml_load_string
simplexml_load_string
(PHP 5)
simplexml_load_string -- Интерпретирует строку с XML в объект
Описание
object simplexml_load_string ( string data [, string class_name [, int options]] )
Эта функция берет "правильный" XML-документ, находящийся в строке data и возвращает объект класса SimpleXMLElement, имеющий свойства, равные содержимому xml-документа. Если XML-документ имеет ошибки, функция возвратит FALSE.
Вы можете использовать необязательный параметр class_name для того, чтобы функция simplexml_load_string() вернула объект заданного класса. Этот класс должен расширять класс SimpleXMLElement.
Начиная с PHP 5.1.0 и Libxml 2.6.0, вы можете также использовать необязательный параметр options, содержимое которого определено в additional Libxml parameters.
Пример 1. Преобразование XML-строки
<?php
$string = <<<XML
<?xml version='1.0'?>
<document>
<title>Forty What?</title>
<from>Joe</from>
<to>Jane</to>
<body>
I know that's the answer -- but what's the question?
</body>
</document>
XML;
$xml = simplexml_load_string($string);
var_dump($xml);
?>
Этот пример выведет:
SimpleXMLElement Object( [title] => Forty What? [from] => Joe [to] => Jane [body] => I know that's the answer -- but what's the question?)
В этом примере вы можете также использовать конструкции $xml-body и т.д.
Символические ссылки. Жесткие ссылки.
Немного теории
В системах Unix довольно часто возникает необходимость иметь для одного и того же файла или каталога разные имена. При этом одно из имен логично назвать основным, а все другие - его псевдонимами. В терминологии Unix такие псевдонимы называются символическими ссылками.
Символическая ссылка - это просто бинарный файл специального вида, который содержит ссылку на основной файл. При обращении к такому файлу (например, открытию его на чтение) система "соображает", к какому объекту на самом деле запрашивается доступ, и прозрачно его обеспечивает. Это означает, что мы можем использовать символические ссылки точно так же, как и обычные файлы. Однако иногда нужно бывает работать со ссылкой именно как со ссылкой, а не как с файлом. Для этого и существуют перечисленные ниже функции PHP.
Жесткие ссылки
Создание символической ссылки - не единственный способ задать для одного файла несколько имен. Главный недостаток символических ссылок - существование основного имени файла, на которое все и ссылаются. Попробуйте удалить этот файл - и вся "паутина" ссылок, если таковая имелась, развалиться на куски. Есть и другой недостаток: открытие файла, на который указывает ссылка, происходит несколько медленнее, т.к. системе нужно проанализировать содержимое ссылки и установить связь с "настоящим" файлом. Особенно это чувствуется, если одна ссылка указывает на другую, а та на третью и т.д. уровней на 10.
Жесткие ссылки позволяют вам иметь для одного файла несколько совершенно равноправных имен, причем доступ по ним осуществляется одинаково быстро. При этом, если одно из таких имен будет удалено, то сам файл удалиться только в том случае, если данное имя было последним, и других имен у файла нет.
Зарегистрировать новое имя у файла (то есть создать для него жесткую ссылку) можно с помощью функции link(). Ее синтаксис полностью идеентичен функции symlink(), да и работает она по тем же правилам, за исключением того, что создает не символическую, а жесткую ссылку.
readlink
Возвращает имя основного файла.
Синтаксис:
string readlink(string $linkname)
Возвращает имя основного файла, с которым связан его синоним $linkname. Это бывает полезно, если вы хотите узнать основное имя файла, чтобы, например, удалить сам файл, а не ссылку на него. В случае ошибки функция возвращает значение "ложь".
symlink
Создает символическую ссылку.
Синтаксис:
bool symlink(string $target, string $link)
Эта функция создает символическую ссылку с именем $link на объект (файл или каталог), заданную в $target. В случае "провала" функция возвращает false.
lstat
Функция собирает вместе всю информацию, выдаваемую операционной системой для указанной ссылки, и возвращает ее в виде массива.
Синтаксис:
array lstat(string $filename)
Функция полностью аналогична вызову stat(), за исключением того, что если $filename задает не файл, а символическую ссылку, будет возвращена информация именно об этой ссылке (а не о файле, на который она указывает, как это делает stat()).
linkinfo
Функция возвращает значение поля "устройство" из результата, выдаваемого функцией lstat().
Синтаксис:
int linkinfo(string $linkname)
Ее обычно задействуют, если хотят определить, существует ли еще объект, на который указывает символическая ссылка в $linkname.
Функции даты и времени
checkdate
Проверяет правильность даты/времени.
Синтаксис:
int checkdate(int month, int day, int year);
Функция checkdate() проверяет правильность даты, заданной в ее аргументах.
Возвращает true если дата, указанная как "month, day, year" (месяц, число, год), правильна, иначе false. Дата считается правильной, если:
$month=1;
$day=10;
$year=2002;
if(checkdate($month,$day,$year)) echo "Такой день есть!";
else echo "Такого дня нет!";
Выведет:
Такой день есть!
$month=13;
$day=10;
$year=2002;
if(checkdate($month,$day,$year)) echo "Такой день есть!";
else echo "Такого дня нет!";
Выведет:
Такого дня нет!
date
Формат локального времени/даты.
Синтаксис:
string date(string format [, int timestamp]);
Эта функция возвращает строку, содержащую дату и время, отформатированную согласно строке format и используя временную метку timestamp или текущее локальное время, если не задана временная метка.
В фоматной строке должны использоваться следующие символы:
Все остальные символы в строковом аргументе format возвращаются в результирующей строке "как есть".
Формат "Z" всегда возвращает 0 при использовании с функцией gmdate().
echo date("Сегодня d.m.Y");
//Сегодня 31.01.2002
echo date( "l dS of F Y h:i:s A" );
// Thursday 31st of January 2002 12:51:19 PM
echo "July 1, 2000 is on a " . date("l", mktime(0,0,0,7,1,2000));
// July 1, 2000 is on a Saturday
Функции date() и mktime() возможно использовать вместе для того, чтобы найти даты в будущем или прошлом.
$tomorrow = mktime(0,0,0,date("m") ,date("d")+1,date("Y"));
$lastmonth = mktime(0,0,0,date("m")-1,date("d"), date("Y"));
$nextyear = mktime(0,0,0,date("m"), date("d"), date("Y")+1);
localtime
Получает информацию о дате/времени.
Синтаксис:
array localtime([int timestamp [, bool is_associative]]);
Первый необязательный аргумент этой функции задает метку времени Unix. В случае, если он не указан, то используется текущее время.
Если второй необязательный параметр равен нулю (по умолчанию), то возвращаемый массив будет численно индексирован; в противном случае возвращается ассоциативный массив, где элементы имеют следующие значения:
gettimeofday
Получени даты системным вызовом.
Синтаксис:
array gettimeofday();
Эта функция возвращает ассоциативный массив, который содержит дату, возвращенную системным вызовом. Функция является интерфейсом системной функции gettimeofday(2).Возвращаемый ассоциативный массив содержит следующие элементы:
strftime
Форматирует время согласно локальным установкам.
Синтаксис:
string strftime(string format [, int timestamp]);
Возвращает строку, отформатированную согласно данной форматной строке format и используя данную временную метку timestamp или текущее локальное время, если метка не задана.
Функцией setlocale() можно выставить язык, на котором будут выводиться названия месяцев и дней.
В форматной строке следует использовать следующие спецификаторы преобразований:
setlocale ("LC_TIME", "C");
print(strftime("%A in Finnish is "));
setlocale ("LC_TIME", "fi");
print(strftime("%A, in French "));
setlocale ("LC_TIME", "fr");
print(strftime("%A and in German "));
setlocale ("LC_TIME", "de");
print(strftime("A.n"));
Форматирует локальное время согласно установкам locale.
getdate
Получает информацию о дате/времени.
Синтаксис:
array getdate(int timestamp);
Возвращает ассоциативный массив, содержащий информацию о дате со следующими элементами:
print_r(getdate(time()));
Приведенный пример выведет следующее:
Array( [seconds] => 23 [minutes] => 44 [hours] => 22 [mday] => 15 [wday] => 0 [mon] => 8 [year] => 2004 [yday] => 227 [weekday] => Sunday [month] => August [0] => 1092595463)
gmdate
Получение даты в форматированной строке для времени 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( "M 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) );
gmstrftime
Форматирование локальных времени/даты.
Синтаксис:
string gmstrftime(string format, int timestamp);
Действие этой функции аналогично действию функции strftime() с тем отличием, что возвращается время по Гринвичу (GMT).
Например, при запуске в зоне (GMT -0500) первая строка бедт следующей: "Dec 31 1998 20:00:00", а вторая: " Jan 01 1999 01:00:00".
setlocale("LC_TIME", "en_US");
echo strftime("%b %d %Y %H:%M:%S", mktime(20,0,0,12,31,98))."n";
echo gmstrftime("%b %d %Y %H:%M:%S", mktime(20,0,0,12,31,98))."n";
mktime
Получает временную метку UNIX для даты.
Синтаксис:
int mktime([int hour] [,int minute] [,int second] [,int month] [,int day] [,int year] [, int is_dst]);
Возвращает временную метку Unix согласно данным аргументам. Эта временная метка является целым числом, равным количеству секунд между эпохой Unix (1 Января 1970) и указанным временем.
Все парамеры это функции необязательны, но пропускать их можно только справо налево. Если какие-то параметры не заданы, на их место подставляются значения, соответствующие текущей дате.
Аргумент is_dst, указывает, осуществлен ли переход на летнее время (1) или нет (0); если не известно, то аргумент - (-1)
Функция возвращает timestamp, соответствующий указанной дате.
Правильность даты, переданной в параметрах, не проверяется. В случае некорректной даты ничего особенного не происходит - функция "делает вид", что ее не касается, и формирует соответствующий timestamp.
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) ); // неправильная дата
Выводит три одинаковых числа
gmmktime
Аналог функции time() для времени GMT.
Синтаксис:
int gmmktime(int hour, int minute, int second, int month, int day, int year [, int is_dst]);
Идентична mktime() за исключением того, что передаваемые параметры передают время по Гринвичу (GMT).
time
Получение времени в секунадх.
Синтаксис:
int time();
Возвращает текущее время, измеренное в числе секунд с эпохи Unix (1 Января 1970 00:00:00 GMT).
Этот формат данных принят в Unix как стандартный (называется "UNIX timestamp"): в частности, время последнего изменения файлов указывается именно в таком формате. Вообще говоря, почти все функции по работе со временеи имеют дело именно с таким его представлением (которое называется timestamp). То есть представление " количество секунд с 1 января 1970 года" весьма универсально и, что главное, - удобно.
echo time();
microtime
Возвращает текущую временную метку UNIX в микросекундах.
Синтаксис:
string microtime();
Возвращает строку "msec sec" где sec текущее время, измеренное в числе секунд с эпохи Unix (0:00:00 1 Января, 1970 GMT), а msec - это часть в микросекундах. Эти функции доступны только в операционных системах, поддерживающих системный вызов gettimeofday().
Но дело в том, что милисекунды в различных OC выглядят по разному. Например в Unix это действительно число микросекунд, а в Windows - непонятное значение.
echo microtime(); // в Windows выведет что-то типа 0.53033200 1012468870
strtotime
Лексическое преобразование строки времени в Unix timestamp.
Синтаксис:
int strtotime(string time [, int now]);
В аргументе time функция получает дату в англоязычном формате, а затем преобразует ее в целочисленный формат Unix timestamp.
echo strtotime("now")."n";echo strtotime("10 September 2002")."n";echo strtotime("+2 day")."n";echo strtotime("+3 week")."n";echo strtotime("+1 week 2 days 4 hours 34 seconds")."n";
Логические функции определения типа переменной
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 is_numeric(mixed var)
Возвращает true, если var имеет численный тип (integer, double), или строковой с числовым значением.
is_bool
Проверяет, является ли переменная логической.
Синтаксис:
bool is_bool(mixed var)
Возвращает true, если var имеет тип логического значения (TRUE или FALSE), а иначе - false.
is_int
Определяет, является ли переменная типа integer(целочисленной).
Синтаксис:
bool is_int(mixed var);
Возвращает true, если var имеет целочисленный тип.
is_integer
Определяет, является ли переменная типа integer.
Синтаксис:
bool is_integer(mixed var);
Возвращает true, если var является типа integer (целочисленной), или false в обратном случае.
is_long
Определяет, является ли переменная типа integer(целочисленной).
Синтаксис:
bool is_long(mixed var);
Возвращает true, если var имеет целочисленный тип (integer, long), или false в обратном случае.
is_real
Определяет, является ли переменная типа real (дробной).
Синтаксис:
bool is_real(mixed var);
Возвращает true, если var типа real (дробная), или false в обратном случае.
is_float
Определяет, является ли переменная типа float (дробная).
Синтаксис:
bool is_float(mixed var);
Возвращает true, если var типа float (дробная), или false в обратном случае.
is_double
Определяет, является ли переменная типа 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 - это объект (object), или false в обратном случае.
is_resource
Определяет, является ли переменная указателем на ресурс.
Синтаксис:
bool is_resource(mixed var);
Возвращает true, если var указывает на ресурс, выделенный и возвращенный предназначенной для этого функцией.
Ресурсы - это объекты, подобные файлам или результатам запросов к базам данных, выделяемые и освобождаемые внутренними функциями PHP. Когда программе больше не требуется какой-либо ресурс, хорошей практикой программирования является его явное освобождение предназначенными для этого функциями. Но в большинстве случаев интерпретатор PHP самостоятельно, по мере необходимости освобождает ненужные ресурсы (обычно при завершении сценария).
get_resource_type
Определение типа дескриптора ресурса.
Синтаксис:
string get_resource_type(resource $handle);
Эта функция возвращает строку, содержащую описание типа ресурса. Если в аргументе передается неверный указатель на ресурс, то возникает ошибка.
$c = mysql_connect();
echo get_resource_type($c)."n";
// выведет: mysql link
$file = fopen("filename.txt","w");
echo get_resource_type($file)."n";
// выведет: file
$doc = new_xmldoc("1.0");
echo get_resource_type($doc)."n";
// выведет: domxml document
Функции переменных
gettype
Получает тип переменной.
Синтаксис:
string gettype(mixed var);
Возвращает тип переменной PHP var.
Возможные значения для возвращаемой строки:
intval
Возвращает целочисленное значение переменной.
Синтаксис:
int intval(mixed var, int [base]);
Возвращает целочисленное значение переменной var, используя указанное основание для перевода (по умолчанию 10). var может быть скалярного типа. Вы не можете использовать функцию intval() для массивов или объектов.
doubleval
Получает значение переменной в формате double.
Синтаксис:
double doubleval(mixed var);
Возвращает double (с плавающей точкой) значение переменной var.
var может быть скалярного типа. Вы не можете использовать doubleval() на массивах и объектах.
empty
Определяет, есть ли у переменной какое либо значение.
Синтаксис:
int empty(mixed var);
Возвращает false, если var существует и имеет не пустое или не нулевое значение; true в обратном случае.
Фактически функция проверяет, имеет ли переменное значение, которое может быть приравнено к 0, то есть: (var==0)
$var=0;
if(empty($var)) {
echo "$var - либо 0, либо не имеет значения";
if(!isset($var)) {
echo "$var не имеет значения";
};
};
Заметьте, что эту функцию бесполезно использовать с аргументом, отличным от переменной, например выражение empty (Addslashes($name)) бессмысленно, т.к. здесь проверяется значение, возвращаемое функцией. Единственное, что может выявить в данном варианте функция empty(), это имеет ли выражение значение, эквивалентное true (не равное нулю), а это может быть проверено и без использования функции.
isset
Определяет, существует ли переменная.
Синтаксис:
int isset(mixed var);
Возвращает true, если var существует; false в обратном случае.
Фактически функция проверяет, имеет ли переменная значение, идентичное null, то есть: (var===null). Отметьте различие между равенством и идентичностью.
Если переменная была удалена функцией unset(), она больше не будет определяться функцией isset().
$a = "test";
echo isset($a); // true
unset($a);
echo isset($a); // false
settype
Устанавливает тип переменной.
Синтаксис:
int settype(string var, string type);
Устанавливает тип переменной var на type.
Возможные значения type :
Возвращает true, при успехе; false в обратном случае.
strval
Получает строковое значение переменной.
Синтаксис:
string strval(mixed var);
Получает строковое значение var.
var может быть любого скалярного типа. Вы не можете использовать strval() на массивах или объектах.
unset
Удаляет указанную переменную.
Синтаксис:
int unset(mixed var);
unset() уничтожает указанную переменную и возвращает true.
Пример:
unset( $foo );
unset( $bar["quux"] );
Функции для работы с функциями
get_defined_functions
Возвращает перечень всех доступных функций.
Синтаксис:
array get_defined_functions()
Функция get_defined_functions() возвращает многомерный массив, который содержит имена всех доступных сценарию функций.
print_r(get_defined_functions);
function_exists
Проверяет существование функции.
Синтаксис:
bool function_exists(string fuction_name)
Функция function_exists() возвращает значение true, если функция с именем function_name имеется в сценарии. В противном случае возвращает false.
if(function_exists("imagecreate")) {
echo "Библиотека работы с графикой доступна!
";
} else {
echo "Библиотека работы с графикой недоступна!
";
};
call_user_func
Производит косвенный выбор функции.
Синтаксис:
mixed call_user_func(string function_name [, mixed parameter [, mixed ...]])
Функция call_user_func() вызывает функцию function_name и передает ей все остальные параметры parameter ...
<?php
function myFunc($str) {
echo $str;
};
call_user_func("myFunc", "Hello World");
?>
create_function
Динамическое создание функции.
Синтаксис:
string create_function(string args, string code)
Функция create_function() создает анонимную функцию и возвращает имя, созданное для этой функции. Аргументы функции, перечисленные в аргументе args, обычно передаются в одинарных кавычках. Также передается тело функции в аргументе code. Это необходимо для того, чтобы не допустить замену интерпретатором переменных на значения. Если всеже ограничивать двойными кавычками, то необходимо предварять указание переменных слешем :$var.
Обычно возвращаемые функцией имена содержат префикс lambda_.
При помощи этой функции можно создавать функции на основе информации, полученной во время исполнения сценария.
$func = create_function('$a,$b',
'return "$a*$b = ".$a*$b);');
echo "Имя новой функции: $func<br>";
echo $func(2,3);
Данный пример выведет следующее:
Имя новой функции: lambda_16
func_get_arg
Получение аргумента функции.
Синтаксис:
mixed func_get_arg(int arg_num);
Функция func_get_arg() возвращает указанный в arg_num агрумент, который был передан в текущую пользовательскую функцию в качестве параметра. Перечисление переданных в функцию параметров начинается с нуля.
В случае, если эта функция вызывается вне определения функции, то она выдает предупреждение об ошибке. Также предупреждение будет выдаваться при попытке узнать параметр, которого не существует в списке аргументов (функция возвратит false). Для того, чтобы функция работала корректно, необходимо заранее узнать общее количество параметров, которое передается в пользовательскую функцию с помощью функции func_num_args().
<?php
function func() {
$num_args=func_num_args();
echo "Число аргументов у этой функции: $num_args<br>";
for($i=0;$i<$num_args;$i++)
echo "$i агрумент: ".func_get_arg($i)."<br>";
};
func("2",1,"tree");
?>
func_get_args
Получение аргументов функции в массиве.
Синтаксис:
array func_get_args();
Функция func_get_args() возвращает в массиве список аргументов, с которым была вызвана текущая пользовательская функция. Если функция func_get_args() вызывается вне определения пользовательской функции, то выдается предупреждение об ошибке.
<?php
function func() {
$num_args = func_num_args();
echo "Число аргументов у этой функции: $num_args<br>";
$func_list = func_get_args();
for($i=0;$i<$num_args;$i++)
echo "$i агрумент номер $i: ".$func_list[$i]."<br>";
};
func("2",1,"tree");
?>
func_num_args
Возвращает число полученных аргументов в пользовательской функции.
Синтаксис:
int func_num_args();
Функция func_num_args() возвращает число аргументов, которые были переданы в текущую пользовательскую функцию.
Обычно эту функцию используют совместно с функциями func_get_arg() и func_get_args() в пользовательских функциях, которые могут принимать неопределенное количество параметров.
<?php
function func() {
$num_args = func_num_args();
echo "Число аргументов у этой функции: $num_args<br>";
$func_list = func_get_args();
for($i=0;$i<$num_args;$i++)
echo "$i агрумент номер $i: ".$func_list[$i]."<br>";
};
func("2",1,"tree");
?>
Календарные функции
JDToGregorian
Преобразование дневного Юлианcкого счета в Грегорианскую дату.
Синтаксис:
string jdtogregorian(int julianday);
Преобразование дневного Юлианcкого счета в Грегорианскую в формате "месяц/день/год"
GregorianToJD
Преобразовывает Грегорианскую дату на Дневный Юлианский cчет.
Синтаксис:
int gregoriantojd(int month, int day, int year);
Правильный диапазон для Грегорианского календаря 4714 д.э. до 9999 н.э.
Хотя это программное обеспечение может оперировать даты в обратном порядке до 4714 д.э., такое использование может быть бесполезно и не значительно. Грегорианский календарь не был учрежден до Октября 15, 1582 (или Октябрь 5, 1582 в Юлианском календаре). Некоторые страны еще очень долго не принимали его. Например, Великобритания преобразовалась в 1752, СССР в 1918 и Греции в 1923. Наиболее Европейские страны использовали Юлианский Календарь До Грегорианского.
Пример:
<?php
$jd = GregorianToJD(10,11,1970);
echo("$jdn");
$gregorian = JDToGregorian($jd);
echo("$gregoriann");
?>
JDToJulian
Преобразовывает дату Юлианского календаря на дневный Юлианский счет.
Синтаксис:
string jdtojulian(int julianday);
Преобразование дневного Юлианского счета в строку, содержащую дату Юлианского Календаря в формате "месяц/день/год".
JulianToJD
Преобразовывает дату Юлианского Календаря на дневной Юлианский счет.
Синтаксис:
int juliantojd(int month, int day, int year);
Правильный диапазон для Юлианского календаря 4713 д.э. до 9999 н.э.
Хотя это программное обеспечение может оперировать даты в обратном порядке до 4713 д.э. такое использование может быть бесполезно и не значительно. Календарь был создан в 46 д.э., но подробные не стабилизировался до по крайней мере 8 н.э., и возможно позднее в 4-ом столетии. Также, начало года различно от одной культуры к другой - не все соглашаются, что Январь это первый месяц.
JDToJewish
Преобразовывает дневной Юлианский счет в Еврейский календарь.
Синтаксис:
string jdtojewish(int julianday);
JewishToJD
Преобразовывает дату в Еврейском Календаре на дневной Юлианский счет.
Синтаксис:
int jewishtojd(int month, int day, int year);
Еврейский календарь использовался в течение нескольких тысячелетий, но в течение начального периода не было никакой формулы, чтобы определить начало месяца. Новый месяц начинался когда замечено полнолуние.
JDToFrench
Преобразовывает дневной Юлианский счет в Французский Республиканский календарь.
Синтаксис:
string jdtofrench(int month, int day, int year);
Преобразовывает дневной Юлианский счет в Французский Республиканский календарь.
FrenchToJD
Преобразовывает дату и Французского Республиканского календаря в дневной Юлианский счет.
Синтаксис:
int frenchtojd(int month, int day, int year);
Эта программа преобразовывают даты в начиная с 1 до 14 (Грегорианские даты 22 Сентября 1792 до 22 1806 Сентября). Это покрывает тот период когда календарь использовался.
JDMonthName
Возвращает название месяца.
Синтаксис:
string jdmonthname(int julianday, int mode);
Возвращает строку с названием месяца. julianday сообщает функции, в какой календарь нужно преобразовать древний Юлианский счет на, и какой тип месячных имен должен быть возвращен.
Календарные способы
JDDayOfWeek
Возвращает день недели.
Синтаксис:
mixed jddayofweek(int julianday, int mode);
Возвращает день недели. Может возвратить строку(string) или int в зависимости от способа(mode).
Календарные недельные пути
Файлы и сети
Работа с файлами
fopen
Открывает файл и привязывает его к дескриптору.
Синтаксис:
int fopen(string $filename, string $mode, bool $use_include_path=false)
Открывает файл с именем $filename в режиме $mode и возвращает дескриптор открытого файла. Если операция "провалилась", то функция возвращает false. Необязательный параметр use_include_path говорит о том, что, если задано относительное имя файла, его следует искать также и списке путей, используемом инструкциями include() и require(). Обычно этот параметр не используют.
Параметр $mode может принимать следующие значения:
Но это еще не полное описание параметра $mode. Дело в том, что в конце любой из строк r,w,a,r+,w+ и a+ может находиться еще один необязательный символ - b или t. Если указан b (или не указан вообще никакой), то файл открывается в режиме бинарного чтения/записи. Если же это t, то для файла устанавливается режим трансляции символа перевода строки, т.е. он воспринимается как текстовой.
tmpfile
Создает новый временный файл с уникальным именем и открывает его на чтение и запись.
Синтаксис:
int tmpfile()
В дальнейшем вся работа должна вестись с возвращенным файловым дескриптором, потому что имя файла недоступно.
Пространство, занимаемое временным файлом, автоматически освобождается при его закрытии и при завершении работы программы.
Открытие файла
fopen
Открывает файл и привязывает его к дескриптору.
Синтаксис:
int fopen(string $filename, string $mode, bool $use_include_path=false)
Открывает файл с именем $filename в режиме $mode и возвращает дескриптор открытого файла. Если операция "провалилась", то функция возвращает false. Необязательный параметр use_include_path говорит о том, что, если задано относительное имя файла, его следует искать также и списке путей, используемом инструкциями include() и require(). Обычно этот параметр не используют.
Параметр $mode может принимать следующие значения:
Но это еще не полное описание параметра $mode. Дело в том, что в конце любой из строк r,w,a,r+,w+ и a+ может находиться еще один необязательный символ - b или t. Если указан b (или не указан вообще никакой), то файл открывается в режиме бинарного чтения/записи. Если же это t, то для файла устанавливается режим трансляции символа перевода строки, т.е. он воспринимается как текстовой.
tmpfile
Создает новый временный файл с уникальным именем и открывает его на чтение и запись.
Синтаксис:
int tmpfile()
В дальнейшем вся работа должна вестись с возвращенным файловым дескриптором, потому что имя файла недоступно.
Пространство, занимаемое временным файлом, автоматически освобождается при его закрытии и при завершении работы программы.
Закрытие файла
fclose
Закрывает файл, открытый предварительно функцией fopen().
Синтаксис:
int fclose(int $fp)
Возвращает false, если файл закрыть не удалось (например, что-то с ним случилось или же разорвалась связь с удаленным хостом). В противном случае возвращает значение "истина".
Всегда нужно закрывать FTP- и HTTP-соединения, потому что в противном случае "беспризорный" файл приведет к неоправданному простою канала и излишней загрузке сервера. Кроме того, успешно закрыв соединение, вы будете уверены в том, что все данные были доставлены без ошибок.
Чтение и запись
fread
Читает из открытого файла определенное количество символов.
Синтаксис:
string fread(int $f, int $numbytes)
Читает из файла $f $numbytes символов и возвращает строку этих символов. После чтения указатель файла продвигается к следующему после прочитанного блока позициям. Если $numbytes больше, чем можно прочитать из файла, возвращается то, что удалось считать. Этот прием можно использовать, если вам нужно считать в строку файл целиком. Для этого просто задайте в $numbytes очень большое число. Но если вы заботитесь об экономии памяти в системе, так поступать не рекомендуется.
fwrite
Запись в файл.
Синтаксис:
int fwrite(int $f, string $str)
Записывает в файл $f все содержимое строки $str. Эта функция составляет пару для fread(), действуя "в обратном направлении".
При работе с текстовыми файлами (то есть когда указан символ t в режиме открытия файла) все n автоматически преобразуются в тот разделитель строк, который принят в вашей операционной системе.
fgets
Читает из файла одну строку, заканчивающуюся символом новой строки n.
Синтаксис:
string fgets(int $f, int $length)
Этот символ также считывается и включается в результат. Если строка в файле занимает больше $length-1 байтов, то возвращаются только ее $length-1 символов. Функция полезна, если вы открыли файл и хотите "пройтись" по всем ее строкам. Однако даже в этом случае (и быстрее) будет воспользоваться функцией File(). Стоит также заметить, что эта функция (как и функция fread()) в случае текстового режима в Windows заботиться о преобразовании пар \r\n в один символ \n.
fputs
Полный аналог fwrite().
Синтаксис:
int fputs(int $f, string $str)
fgetcsv
Функция для работы с одним из форматов файлов, в котором может сохранять данные Excel.
Синтаксис:
list fgetcsv(int $f, int $length, char $delim=",")
Функция читает строку из файла, заданного дескриптором $f, и разбивает ее по символу $delim. Параметр $delim должен обязательно быть строкой из одного символа, в противном случае принимается во внимание только первый символ этой строки. Функция возвращает получившийся список или false, если строки кончились. Параметр $length задает максимальную длину строки точно так же, как это делается в fgets(). Пустые строки в файле не игнорируются, а возвращаются как список из одного элемента - пустой строки.
Пример:
$f=fopen("file.csv","r") or die("Ошибка");
for($i=0; $data=fgetscsv($f, 1000, ";"); $i++) {
$num = count($data);
if($num==1 && $data[0]==="") continue;
echo "<h3>Строка номер $i ($num полей):</h3>";
for($c=0; $c<$num; $c++)
print "[$c]: $data[$c]<br>";
}
fclose($f);
Положение указателя текущей позиции
feof
Указатель конца файла.
Синтаксис:
int feof(int $f)
Возвращает true, если достигнут конец файла (то есть если указатель файла установлен за концом файла).
Пример:
$f=fopen("myfile.txt","r");
while(!feof($f))
{ $str=fgets($f);
// Обрабатываем очередную строку $str
}
fclose($f);
fseek
Устанавливает указатель файла на определенную позицию.
Синтаксис:
int fseek(int $f, int $offset, int $whence=SEEK_SET)
Устанавливает указатель файла на байт со смещением $offset (от начала файла, от его конца или от текущей позиции, в зависимости от параметра $whence). Это может и не сработать, если дескриптор $f ассоциирован не с обычным локальным файлом, а с соединением HTTP или FTP.
Параметр $whence задает с какого места отсчитывается смещение $offset. В PHP для этого существуют три константы, равные, соответственно, 0, 1 и 2:
В случае использования последних двух констант параметр $offset вполне может быть отрицательным (а при применении SEEK_END он будет отрицательным наверняка). В случае успешного завершения эта функция возвращает 0, а в случае неудачи -1.
ftell
Возвращает положение указателя файла.
Синтаксис:
int ftell(int $f)
Функции для определения типов файлов
file_exists
Проверяет существование вызываемого файла.
Синтаксис:
bool file_exists(string filename)
Возвращает true, если файл с именем filename существует на момент вызова. Следует использовать эту функцию с осторожностью.
Например, следующий код никуда не годится с точки зрения безопасности:
if(!file_exists($fname))
$f=fopen($fname,"w");
else
$f=fopen($fname,"r");
Дело в том, что между вызовом file_exists() и открытием файла в режиме w проходит некоторое время, в течение которого другой процесс может вклиниться и подменить используемый нами файл. Данная проблема выходит на передний план при написании сценария счетчика.
Функция не работает с удаленными файлами, файл должен находиться в доступной для сервера файловой системе.
Результаты функции кэшируются, см. функцию clearstatcache().
filetype
Возвращает тип файла.
Синтаксис:
string filetype(string filename)
Возвращает строку, которая описывает тип файла с именем filename. Если такого файла не существует, возвращает false.
После вызова строка будет содержать одно из следующих значений:
is_file
Проверка существования обычного файла.
Синтаксис:
bool is_file(string filename)
Возвращает true, если filename - обычный файл.
is_dir
Проверка существования каталога.
Синтаксис:
bool is_dir(string filename)
Возвращает true, если каталог filename существует.
is_link
Проверка существования символической ссылки на файл.
Синтаксис:
bool is_link(string filename)
Возвращает true, если filename - символическая ссылка.
Функция не работает под Windows.
is_readable
Проверка существования файла, доступного для чтения.
Синтаксис:
bool is_readable(string filename)
Возвращает true, если файл может быть открыт для чтения.
Обычно PHP осуществляет доступ к файлу с привелегиями пользователя, запускающего web-сервер (часто "nobody"). Соображения безопасности должны приниматься в расчет.
is_writeable
Проверка существования файла, доступного для записи.
Синтаксис:
bool is_writeable(string filename)
Возвращает true, если в файл можно писать.Обычно PHP осуществляет доступ к файлу с привелегиями пользователя, запускающего web-сервер (часто "nobody"). Соображения безопасности должны приниматься в расчет.
is_executable
Проверка существования запускаемого файла.
Синтаксис:
bool is_executable(string filename)
Возвращает true, если файл filename - исполняемый.
is_uploaded_file
Проверка существования файла, загруженного методом HTTP POST.
Синтаксис:
bool is_uploaded_file(string filename)
Возвращает true, если файл с именем filename был загружен на сервер посредством HTTP POST.
Часто это полезно, чтобы убедиться, что пользователи из злого умысла не пытались заставить сценарий работать с теми файлами, с которыми им работать не следует.
Определение параметров файла
stat
Функция собирает вместе всю информацию, выдаваемую операционной системой для указанного файла, и возвращает ее в виде массива.
Синтаксис:
array stat(string $filename)
Этот массив всегда содержит следующие элементы с указанными ключами:
Этот массив помещает информацию, которая доступна в системах Unix. Под Windows многие поля могут быть пусты.
Если $filename задает не имя файла, а имя символической ссылки, то всетаки будет возвращена информация о том файле, на который ссылается эта ссылка (а не о ссылке).
fileatime
Возвращает время последнего доступа к файлу.
Синтаксис:
int fileatime(string filename)
Время выражается в количестве секунд, прошедших с 1 января 1970 года (Unix timestamp). Если файл не обнаружен, возвращает false.
Атрибут времени последнего доступа к файлу изменяется каждый раз, когда данные файла читаются. Так как это сильно снижает производительность при интенсивной работе с файлами и каталогами, часто изменение этого атрибута в операционных системах блокируют, и тогда функция бесполезна.
filemtime
Возвращает время последнего изменения файла или false в случае отсутствия файла.
Синтаксис:
int filemtime(string $filename)
filectime
Возвращает время создания файла.
Синтаксис:
int filectime(string $filename)
filesize
Возвращает размер файла в байтах или false, если файла не существует.
Синтаксис:
int filesize(string $filename)
touch
Устанавливает время модификации.
Синтаксис:
int touch(string $filename [, int $timestamp])
Устанавливает время модификации указанного файла $filename равным $timestamp (в секундах, прошедших с 1 января 1970 года). Если второй параметр не указан, то подразумевается текущее время. В случае ошибки возвращает false.
Если файл с указанным именем не существует, он создается пустым.
Функции для работы с именами файлов
basename
Выделяет имя файла из пути.
Синтаксис:
string basename(string $path)
Выделяет основное имя из пути $path
Примеры:
echo basename("/home/somebody/somefile.txt"); // выводит "somefile.txt"
echo basename("/"); // ничего не выводит
echo basename("/."); // выводит "."
echo basename("/./"); // также выводит "."
Функция basename() не проверяет существование файла. Она просто берет часть строки после самого правого слеша и возвращает ее.
Эта функция правильно обрабатывает как прямые, так и обратные слеши под Windows.
dirname
Выделяет имя каталога.
Синтаксис:
string dirname(string $path)
Возвращает имя каталога, выделенное из пути $path. Функция довольно "разумна" и умеет выделять нетривиальные ситуации, которые описаны в примерах:
echo dirname("/home/file.txt"); // выводит "/home"
echo dirname("../file.txt"); // выводит ".."
echo dirname("/file.txt"); // выводит "/" под Unix,
// "" под Windows
echo dirname("/"); // то же самое
echo dirname("file.txt"); // выводит "."
Если функции dirname() передать просто имя файла, она вернет ".", что означает "текущий каталог".
tempnam
Генерирует уникальное имя файла в определенном каталоге.
Синтаксис:
string tempnam(string $dir, string $prefix)
Генерирует имя файла в каталоге $dir с префиксом $prefix в имени, причем так, чтобы созданный под этим именем в будущем файл был уникален. Для этого к строке $prefix присоединяется некое случайное число.
Например, вызов tempnam("/tmp","temp") может возвратить /tmp/temp3a6b243c.
Если такое имя нужно создать в текущем каталоге, передайте $dir="."
realpath
Преобразует относительный путь в абсолютный.
Синтаксис:
string realpath(string $path)
Преобразует относительный путь $path в абсолютный, т.е. начинающийся от корня.
Пример:
echo realpath("../t.php"); // например, /home/t.php
echo realpath("."); // выводит имя текущего каталога
Файл, который указан в параметре $path, должен существовать, иначе функция возвратит false.
Функции манипулирования целыми файлами
copy
Копирует файл.
Синтаксис:
bool copy(string $src, string $dst)
Копирует файл с именем $src в файл с именем $dst. При этом, если файл $dst на момент вызова существовал, осуществляется его перезапись.
Функция возвращает true, если копирование прошло успешно, а в случае провала - false.
Функция не выполняет переименования файла, если его новое имя расположено в другой файловой системе (на другой смонтированной системе в Unix или на другом диске в Windows).
unlink
Удаление файла.
Синтаксис:
bool unlink(string $filename)
Удаляет файл с именем $filename. В случае неудачи возвращает false, иначе - true.
Надо заметить, что файл удаляется только в том случае, если число "жестких" ссылок на него стало равным 0. Правда, эта схема специфична для Unix-систем.
file
Считывает файл и разбивает его по строкам.
Синтаксис:
list file(string $filename)
Считывает файл с именем $filename целиком и возвращает массив-список, каждый элемент которого соответствует строке в прочитанном файле.
Неудобство этой функции состоит в том, что символы конца строки (обычно \n), не вырезаются из строк файла, а также не транслируются, как это делается для текстовых файлов.
Другие функции
ftruncate
Усекает файл.
Синтаксис:
bool ftruncate(int $f, int $newsize)
Эта функция усекает открытый файл $f до размера $newsize. Разумеется, файл должен быть открыт в режиме, разрешающим запись.
Например, следующий код очищает весь файл:
ftruncate($f,0);
fflush
Немедленная запись всех изменений в файле.
Синтаксис:
void fflush(int $f)
Заставляет PHP немедленно записать на диск все изменения, которые производились до этого с открытым файлом $f. Что это за изменения? Дело в том, что для повышения производительности все операции записи в файл буферизируются: например, вызов fputs($f, "Это строка!") не приводит к непосредственной записи данных на диск - сначало они попадают во внутренний буфер (обычно размером 8К). Как только буфер заполняется, его содержимое отправляется на диск, а сам он очищается, и все повторяется вновь. Особенный выигрыш от буферизации чувствуется в сетевых операциях, когда просто глупо отправлять данные маленькими порциями.
set_file_buffer
Устанавливает размер буфера.
Синтаксис:
int set_file_buffer(int $f, int $size)
Эта функция устанавливает размер буфера, о котором говорилось выше, для указанного открытого файла $f.
Чаще всего она используется так:
set_file_buffer($f,0);
Приведенный код отключает буферизацию для указанного файла, так что теперь все данные, записываемые в файл, немедленно отправляются на диск или в сеть.
flock
Блокирование файла.
Синтаксис:
bool flock(int $f, int $operation [, int $wouldblock])
Функция устанавливает для указанного открытого дескриптора файла $f режим блокировки, который бы хотел получить текущий процесс. Этот режим задается аргументом $operation и может быть одной из следующих констант:
В случае, если был затребован режим без ожидания, и блокировка не была успешно установлена, в необязательный параметр-переменную $wouldblock будет записано значение истина true.
В случае ошибки функция возвращает false, а в случае успешного завершения - true.
Функции для работы с каталогами
mkdir
Создание каталога.
Синтаксис:
bool mkdir(string $name, int $perms)
Создает каталог с именем $name и правами доступа perms. Права доступа для каталогов указываются точно так же, как и для файлов. Чаще всего значение $perms устанавливают равным 0770 (предваряющий ноль обязателен - он указывает PHP на то, что это - восьмеричная константа, а не десятичное число).
Пример:
mkdir("my_directory",0755);
// создает подкаталог в текущем каталоге
mkdir("/data");
// создает подкаталог data в корневом каталоге
В случае успеха функция возвращает true, иначе - false.
rmdir
Удаление каталога.
Синтаксис:
bool rmdir(string $name)
Удаляет каталог с именем $name.
Каталог должен быть пустым, а его атрибуты должны позволять это.
В случае успеха функция возвращает true, иначе - false.
chdir
Смена текущего каталога.
Синтаксис:
int chdir(string $directory);
Изменяет текущий PHP каталог на directory. Возвращает FALSE если не может изменить, TRUE если смена произошла. Параметр $directory может определять и относительный путь, задающийся от текущего каталога.
Примеры:
chdir("/tmp/data"); // переходим по абсолютному пути
chdir("./js"); // переходим в подкаталог текущего каталога
chdir(".."); // переходим в родительский каталог
chdir("~/data"); // переходим в /home/пользователь/data (для Unix)
getcwd
Полный путь.
Синтаксис:
string getcwd()
Данная функция возвращает текущую директорию, относительно которой проводятся файловые операции, т.е. возвращает полный путь к текущему каталогу, начиная от "корня" (/). Если такой путь не может быть отслежен, вызов "проваливается" и возвращается false.
diskfreespace
Определяет свободное пространство в каталоге
Синтаксис:
float diskfreespace (string directory);
Данная функция возвращает в байтах свободное пространство в каталоге directory, то есть в соответствующей ей файловой системе или на разделе диска.
Пример:
$diskspace=diskfreespace("/");
// Тем самым мы определили свободное место в корневой директории "/"
Манипулирование каталогами
mkdir
Создание каталога.
Синтаксис:
bool mkdir(string $name, int $perms)
Создает каталог с именем $name и правами доступа perms. Права доступа для каталогов указываются точно так же, как и для файлов. Чаще всего значение $perms устанавливают равным 0770 (предваряющий ноль обязателен - он указывает PHP на то, что это - восьмеричная константа, а не десятичное число).
Пример:
mkdir("my_directory",0755);
// создает подкаталог в текущем каталоге
mkdir("/data");
// создает подкаталог data в корневом каталоге
В случае успеха функция возвращает true, иначе - false.
rmdir
Удаление каталога.
Синтаксис:
bool rmdir(string $name)
Удаляет каталог с именем $name.
Каталог должен быть пустым, а его атрибуты должны позволять это.
В случае успеха функция возвращает true, иначе - false.
chdir
Смена текущего каталога.
Синтаксис:
int chdir(string $directory);
Изменяет текущий PHP каталог на directory. Возвращает FALSE если не может изменить, TRUE если смена произошла. Параметр $directory может определять и относительный путь, задающийся от текущего каталога.
Примеры:
chdir("/tmp/data"); // переходим по абсолютному пути
chdir("./js"); // переходим в подкаталог текущего каталога
chdir(".."); // переходим в родительский каталог
chdir("~/data"); // переходим в /home/пользователь/data (для Unix)
getcwd
Полный путь.
Синтаксис:
string getcwd()
Данная функция возвращает текущую директорию, относительно которой проводятся файловые операции, т.е. возвращает полный путь к текущему каталогу, начиная от "корня" (/). Если такой путь не может быть отслежен, вызов "проваливается" и возвращается false.
diskfreespace
Определяет свободное пространство в каталоге
Синтаксис:
float diskfreespace (string directory);
Данная функция возвращает в байтах свободное пространство в каталоге directory, то есть в соответствующей ей файловой системе или на разделе диска.
Пример:
$diskspace=diskfreespace("/");
// Тем самым мы определили свободное место в корневой директории "/"
Работа с записями
dir
Класс каталога (псевдо-объектно ориентированный механизм).
Синтаксис:
new dir(string directory);
Псевдо-объектно ориентированный механизм для получения списка файлов каталога. Открывает каталог из directory.
После этого становятся доступны два свойства объекта: дескриптор каталога handle и строка path, указывающая, какой каталог в настоящий момент используется. Эти свойства доступны, если только каталог был открыт. Свойство handle может быть использован вместе с другими функциями работы с каталогом типа readdir(), rewinddir() и closedir().Для класса доступны три метода: чтение, возврат к началу и закрытие (read, rewind и close соответственно).
Пример:
$d = dir("/etc");