Массивы
PHP Manual

usort

(PHP 4, PHP 5)

usort — Отсортировать массив по значениям используя пользовательскую функцию для сравнения элементов

Описание

bool usort ( array &$array , callback $cmp_function )

Эта функция сортирует элементы массива, используя для сравнения значений пользовательскую функцию. Если вам нужно отсортировать массив по необычному критерию, вы должны использовать эту функцию.

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

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;
}

$a = array(32561);

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;
    }
}

$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().


Массивы
PHP Manual