Справочник по PHP - white cat
Шрифт:
Интервал:
Закладка:
Функция поддерживается 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