Сортировка массивов

В PHP есть несколько функций для сортировки массивов, на этой странице дается их общее описание.

Основные различия между функциями:

  • В одних функциях массивы array сортируются по ключам элементов, в других по значениям: $array['ключ'] = 'значение';
  • В каких-то функциях связь между ключами и значениями после сортировки сохраняется, в каких-то нет. Это может приводить к тому, что ключи будут сбрасываться в числовые значения (0, 1, 2, ...).
  • Различия в порядке сортировки: алфавитный, возрастающий, убывающий, числовой, натуральный, случайный или определенный пользователем
  • Примечание: Все функции сортировки модифицируют переданный массив, а не возвращают отсортированную копию
  • Если функции определяют два элемента как равные, порядок сортировки в этом случае не определен (нестабильная сортировка)

Свойства функций сортировки
Имя функции Сортирует по Сохраняет связь ключ - значение Порядок сортировки Похожие функции
array_multisort() значению ассоциативные да, числовые нет первый массив или настройки сортировки array_walk()
asort() значению да по возрастанию arsort()
arsort() значению да по убыванию asort()
krsort() ключу да по убыванию ksort()
ksort() ключу да по возрастанию asort()
natcasesort() ключу да натуральный, чувствителен к регистру natsort()
natsort() значению да натуральный natcasesort()
rsort() значению нет по убыванию sort()
shuffle() значению нет случайный array_rand()
sort() значению нет по возрастанию rsort()
uasort() значению да определяется пользователем uksort()
uksort() ключу да определяется пользователем uasort()
usort() значению нет определяется пользователем uasort()

Коментарии

Another way to do a case case-insensitive sort by key would simply be:

<?php
uksort
($array'strcasecmp');
?>

Since strcasecmp is already predefined in php it saves you the trouble to actually write the comparison function yourself.
2011-03-12 11:57:30
http://php5.kiev.ua/manual/ru/array.sorting.html
Автор:
While this may seem obvious, user-defined array sorting functions ( uksort(), uasort(), usort() ) will *not* be called if the array does not have *at least two values in it*.

The following code:                       

<?php

function usortTest($a$b) {
   
var_dump($a);
   
var_dump($b);
    return -
1;
}

$test = array('val1');
usort($test"usortTest");

$test2 = array('val2''val3');
usort($test2"usortTest");

?>

Will output: 

string(4) "val3"
string(4) "val2"

The first array doesn't get sent to the function.

Please, under no circumstance, place any logic that modifies values, or applies non-sorting business logic in these functions as they will not always be executed.
2013-05-17 23:28:34
http://php5.kiev.ua/manual/ru/array.sorting.html
Автор:
Stabilizing the sort functions (in this case, usort).

<?php
function stable_usort(&$array$cmp)
{
   
$i 0;
   
$array array_map(function($elt)use(&$i)
    {
        return [
$i++, $elt];
    }, 
$array);
   
usort($array, function($a$b)use($cmp)
    {
        return 
$cmp($a[1], $b[1]) ?: ($a[0] - $b[0]);
    });
   
$array array_column($array1);

?>

Tags each array element with its original position in the array so that when the comparison function returns 0 the tie can be broken to put the earlier element first.
2016-09-25 01:55:57
http://php5.kiev.ua/manual/ru/array.sorting.html

    Поддержать сайт на родительском проекте КГБ