Смекни!
smekni.com

Учебник php (стр. 5 из 26)

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

Синтаксис :
int krsort(array arr [, int sort_flags]);

Эта функция аналогична функции ksort(), только она упорядочивает массив по ключам в обратном порядке.

natsort
Выполняет "естественную" сортировку массива.

Синтаксис :
void natsort(array arr);

Функция natsort() сортирует массив в "естественном" для человека порядке.

$arr1 = array("html_12.html", "html_10.html", "html_2.html", "html_1.html");$arr2 = $arr1;sort($arr1);echo "Стандартнаясортировка:\n";print_r($arr1);natsort($arr2);echo "Естественная сортировка:\n"print_r($arr2);

Этот пример выведет следующее:

Стандартная сортировка:Array( [0] => html_1.html [1] => html_10.html [2] => html_12.html[3] => html_2.html)Естественная сортировка:Array([3] => html_1.html [2] => html_2.html [1] => html_10.html[0] => html_12.html)

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

Синтаксис:
void uasort(array arr, function cmp_function)

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

uksort
Пользовательская сортировка массива по ключам.

Синтаксис:
void uksort(array arr, function cmp_function)

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

Довольно часто нам приходится сортировать что-то по более сложному критерию, чем просто по алфавиту. Например, пусть в $Files храниться список имен файлов и подкаталогов в текущем каталоге. Возможно, мы захотим вывести этот список не только в лексографическом порядке, но также чтобы все каталоги предшествовали файлам. В этом случае нам стоит воспользоваться функцией uksort(), написав предварительно функцию сравнения с двумя параметрами, как того требует 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"); //передаем функцию сортировки "по ссылке"

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

Синтаксис:
void usort(array arr, function cmp_function)

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

Эта функция как бы является "гибридом" функций uasort() и sort(). От sort() она отличается тем, что критерий сравнения обеспечивается пользовательской функцией. А от uasort() - тем, что она не сохраняет связей между ключами и значениями, а потому пригодна разве что для сортировки списков.

function FCmp($a,$b) { return strcmp($a,$b); }$A = array("One","Two","Three","Four");usort($A);for($i=0; $i<count($A); $i++) echo "$i:$A[$i] ";// выводит "0:Four 1:One 2:Three 3:Two"

Пример одномерного массива:

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: $val&bsol;n";}

При выполнении будет напечатано:

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 "&bsol;$fruit[$key]:".$val["fruit"]."&bsol;n";}

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

$fruit[0]: apples$fruit[1]: grapes$fruit[2]: lemons

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

Синтаксис:
bool array_multisort(array ar1, [, mixed o1 [, mixed t1 ... [, array ...]]])

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

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

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

· SORT_ASC - сортировка в порядке возрастания (по умолчанию)

· SORT_DESC - сортировка в порядке убывания Флаги типа сортировки (аргументы tx):

· SORT_REGULAR - сравнивать элементы как есть (по умолчанию)

· SORT_NUMERIC - сравнивать элементы как числа

· SORT_STRING - сравнивать элементы как строки

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", 4);

Элементы второго массива, соответствующие одинаковым элементам (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) - сортируются как числа по убыванию

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

reset
Производит сброс курсора массива.

Синтаксис :
mixed reset(array arr);

Функция reset() устанавливает внутренний курсор массива arr на его начало и возвращает значение начального элемента.

end
Производит перенос курсора в конец массива.

Синтаксис :
mixed end(array arr);

Функция end() устанавливает внутренний курсор массива arr на последний элемент и возвращает значение начального элемента.

next
Производит перенос курсора вперед.

Синтаксис :
mixed next(array arr);

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

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

prev
Производит перенос курсора назад.

Синтаксис :
mixed prev(array arr);

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

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

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

Синтаксис :
mixed current(array arr);

Функция current() возвращает значение элемента, на котором в данный момент находится курсор массива, при этом не сдвигая курсор.

Функция возвратит false, если курсор оказался вне пределов массива, или массив не имеет элементов.

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

Синтаксис :
mixed pos(array arr);

Эта функция синоним функции current().

key
Функция возвращает индекс текущего элемента массива.

Синтаксис :
mixed key(array arr);

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

Синтаксис :
array each(array arr);

Функция each() возвращает в массиве пару "индекс и значение" текущего элемента массива, на который указывает внутренний курсор, и сдвигает курсор массива на следующий элемент. Возващаемый массив имеет четыре элемента:

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

Функция возвращает false, если курсор достиг конца массива.

$foo = array("bob", "fred", "jussi", "joini", "egon", "marliese");$bar = each($foo);// теперь $bar = (0=>0, 1=>"bob", key=>0, value=>"bob")

Обычно функцию each() используют в паре с list() для перебора элементов массива:

reset($HTTP_POST_VARS);while(list($key, $val) = each($HTTP_POST_VARS)) {echo "$key = %val<BR>";}

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

Синтаксис :
int array_walk(array arr string func, mixed userdata);

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

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

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

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

$v = array("d"=>"A1", "a"=>"B2", "b"=>"C3", "c"=>"D4");function test_alter(&$item1, $key, $prefix) { // поссылке $item1 = "$prefix $item1";}; function test_print($item2, $key) { echo "$key. $item2<BR>";}; array_walk($v, "test_print");reset($v);array_walk($v, "test_alter");reset($v);array_walk($v, "test_print");

Ключи и значения

array_flip
Меняет местами индексы и значения массива.

Синтаксис :
array array_flip(array arr)

Эта функция "пробегает" по массиву и меняет местами его ключи и значения. Исходный массив arr не изменяется, а результирующий массив просто возвращается. Конечно, если в массиве присутствовало несколько элементов с одинаковыми значениями, учитываться будет только последний из них: