Функции Язык программирования PHP

usort

(PHP 3>= 3.0.3, PHP 4)

usort - сортирует массив по значениям, используя пользовательскую функцию сравнения.

Описание

void usort (array array, string cmp_function)

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

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

Пример 1. usort()
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\n"; }

Это пример выведет:

0: 
6 1: 5 2: 3 3: 2 4: 1

Примечание: очевидно, что в этом тривиальном случае больше подходит rsort().

Пример 2. Использование usort() с многомерным массивом
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()-пример использования функции - члена объекта
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"); uasort($a, array ("TestObj", "cmp_obj")); foreach ($a 
as $item) { print $item->name."\n"; }

Пример выведет:

b 
c d

Предупреждение!

Лежащая в основе функция быстрой сортировки в некоторых C-библиотеках (как в системах Solaris) может вызвать облом PHP, если функция сравнения не возвращает подходящие значения.

См. также uasort(), uksort(), sort(), asort(), arsort(), ksort(), natsort() и rsort().


Назад Оглавление Вперёд
uksort Вверх Функции Aspell
[не рекомендуется применять]

Возвращение сложных значений

Ваша функция может также возвращать сложные типы данных, такие как объект/object или массив/array.

Возвращение объекта:

  1. Вызвать object_init(return_value).

  2. Заполнить его значениями. Функции, предназначенные для этого, перечислены ниже.

  3. Возможно, зарегистрировать функции для этого объекта. Чтобы получать значения из объекта, функции понадобится получить "this" из active_symbol_table. Его тип должен быть IS_OBJECT, и это как правило таблица регулярного хэш (т.е. вы можете использовать функции регулярного хэша на .value.ht). Фактическая регистрация функции может быть выполнена с использованием :
    add_method( 
    return_value, function_name, function_ptr );