(PHP 4, PHP 5, PHP 7)
usort — Сортирует массив по значениям используя пользовательскую функцию для сравнения элементов
Эта функция сортирует элементы массива, используя для сравнения значений callback-функцию, предоставленную пользователем. Используйте эту функцию, если вам нужно отсортировать массив по какому-нибудь необычному признаку.
Замечание:
Если оба сравниваемых значения эквивалентны, то порядок их в отсортированном массиве не определен.
Замечание: Эта функция присваивает новые ключи элементам
массива
. Она удалит все существующие ключи, а не просто переупорядочит их.
array
Входной массив.
value_compare_func
Функция сравнения должна возвращать целое, которое меньше, равно или больше нуля, если первый аргумент является соответственно меньшим, равным или большим чем второй. Обратите внимание, что до PHP 7.0.0, это целое не могло выходить за рамки диапазона с -2147483648 по 2147483647
Возвращает TRUE
в случае успешного завершения или FALSE
в случае возникновения ошибки.
Пример #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");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
?>
Результат выполнения данного примера:
0: 1 1: 2 2: 3 3: 5 4: 6
Замечание:
Очевидно, что для этого тривиального случая более подходит функция sort().
Пример #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"] . "\n";
}
?>
При сортировке многомерного массива переменные $a и $b содержат ссылки на первые два индекса массива.
Результат выполнения данного примера:
$fruits[0]: apples $fruits[1]: grapes $fruits[2]: lemons
Пример #3 Пример использования usort() с методом класса
<?php
class TestObj {
var $name;
function TestObj($name)
{
$this->name = $name;
}
/* Это статическая функция сравнения: */
static 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 . "\n";
}
?>
Результат выполнения данного примера:
b c d
Пример #4 Пример использования функции usort() с применением анонимной функции для сортировки многомерного массива
<?php
$array[0] = array('key_a' => 'z', 'key_b' => 'c');
$array[1] = array('key_a' => 'x', 'key_b' => 'b');
$array[2] = array('key_a' => 'y', 'key_b' => 'a');
function build_sorter($key) {
return function ($a, $b) use ($key) {
return strnatcmp($a[$key], $b[$key]);
};
}
usort($array, build_sorter('key_b'));
foreach ($array as $item) {
echo $item['key_a'] . ', ' . $item['key_b'] . "\n";
}
?>
Результат выполнения данного примера:
y, a x, b z, c