(PHP 4, PHP 5)
usort — Сортира масив по стойностите, използвайки потребителска функция за сравнение
Тази функция ще сортира масив на базата на стойностите му, използвайки потребителска функция за сравнение. Ако масивът, който искате да сортирате, трябва да се сортира по някакъв необикновен критерий, можете да използвате тази функция.
Забележка: Ако при сравняването тези стойности излязат равни, редът им в сортирания масив ще бъде недефиниран.
Забележка: Тази функция задава нови ключове за елементите на array . Тя няма просто да преподреди ключовете, а ще премахне всички съществуващи ключове, които са били присвоени.
Входният масив.
Функцията за сравнение трябва да връща цяло число - по-малко, равно или по-голямо от нула, ако първият аргумент е съответно - по-малък, равен или по-голям от втория.
Връща TRUE при успех или FALSE при неуспех.
Версия | Описание |
---|---|
4.1.0 | Създаден е нов алгоритъм за сортиране. Параметърът cmp_function вече не съхранява първоначалната последователност на елементите, които се приемат за еднакви. |
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");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
?>
Примерът по-горе ще изведе:
0: 1 1: 2 2: 3 3: 5 4: 6
Забележка: Очевидно при този тривиален случай е по-удачно да се използва функция 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"] . "\n";
}
?>
При сортирането на многомерен масив, $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;
}
/* Това е статичната функция за сравняване: */
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