(PHP 4, PHP 5)
usort — Отсортировать массив по значениям используя пользовательскую функцию для сравнения элементов
Эта функция сортирует элементы массива, используя для сравнения значений пользовательскую функцию. Если вам нужно отсортировать массив по необычному критерию, вы должны использовать эту функцию.
Функция, используемая для сравнения, должна возвращать целое число, меньшее, равное или большее нуля, если первый аргумент соответственно меньше, равен или больше второго.
Note: Если два элемента исходного массива равны, их порядок в отсортированном массиве неопределён. До PHP 4.0.6 пользовательские функции сохраняли для таких элеменов порядок в оригинальном массиве, но новый алгоритм сортировки, появившейся в версии 4.1.0 больше не использует это решение и не имеет другого эффективного.
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Example#1 Пример использования 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: $value
";
}
?>
Результат выполнения данного примера:
0: 1
1: 2
2: 3
3: 5
4: 6
Note: Очевидно, что для этого тривиального случая более подходит функция sort().
Example#2 Пример использования функцией usort() многомерных массивов
<?php
function cmp($a, $b)
{
return strcmp($a["fruit"], $b["fruit"]);
}
$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp");
while (list($key, $value) = each($fruits)) {
echo "\$fruits[$key]: " . $value["fruit"] . "
";
}
?>
При сортировке многомерного массива переменные $a и $b содержат ссылки на первые два индекса массива.
Результат выполнения данного примера:
$fruits[0]: apples
$fruits[1]: grapes
$fruits[2]: lemons
Example#3 Пример использования usort() с методом класса
<?php
class TestObj {
var $name;
function TestObj($name)
{
$this->name = $name;
}
/* This is the static comparing function: */
function cmp_obj($a, $b)
{
$al = strtolower($a->name);
$bl = strtolower($b->name);
if ($al == $bl) {
return 0;
}
return ($al > $bl) ? +1 : -1;
}
}
$a[] = new TestObj("c");
$a[] = new TestObj("b");
$a[] = new TestObj("d");
usort($a, array("TestObj", "cmp_obj"));
foreach ($a as $item) {
echo $item->name . "
";
}
?>
Результат выполнения данного примера:
b
c
d
См. также uasort(), uksort(), sort(), asort(), arsort(),ksort(), natsort() и rsort().