(PHP 4, PHP 5, PHP 7)
array_multisort — Сортирует несколько массивов или многомерные массивы
&$array1
   [, mixed $array1_sort_order = SORT_ASC
   [, mixed $array1_sort_flags = SORT_REGULAR
   [, mixed $...
  ]]] )Функция array_multisort() может быть использована для сортировки сразу нескольких массивов или одного многомерного массива в соответствии с одной или несколькими размерностями.
Ассоциативные (string) ключи будут сохранены, но числовые ключи будут переиндексированы.
Замечание:
Если оба сравниваемых значения эквивалентны, то порядок их в отсортированном массиве не определен.
array1Сортируемый массив (array).
array1_sort_order
       Порядок для сортировки вышеуказанного аргумента array. Или
       SORT_ASC для сортировки по возрастанию, или SORT_DESC
       для сортировки по убыванию.
      
       Этот аргумент может меняться местами с array1_sort_flags
       или вообще быть пропущенным. В этом случае подразумевается значение SORT_ASC.
      
array1_sort_flagsНастройки сортировки для вышеуказанного аргумента array:
Флаг способа сортировки:
SORT_REGULAR - обычное сравнение элементов
         (без изменения типов)
        SORT_NUMERIC - сравнение элементов как чисел
        SORT_STRING - сравнение элементов как строк
        SORT_LOCALE_STRING - сравнение элементов
          как строк, учитывая текущую локаль. Используется локаль,
          которую можно менять с помощью функции setlocale()
         
        SORT_NATURAL - сравнение элементов как строк 
          с использованием алгоритма "natural order", так же как в функции natsort()
         
        SORT_FLAG_CASE - может быть объединен
          (бинарное OR) с
          SORT_STRING или
          SORT_NATURAL для сортировки без учета регистра
         
        
       Этот аргумент может меняться местами с array1_sort_order
       или вообще быть пропущенным. В этом случае подразумевается значение SORT_REGULAR .
      
...Дополнительные массивы, необязательно следующие после порядка сортировки и флагов. Сравниваются только элементы соответствующие таким же элементам в предыдущих массивах. Другими словами, производится сортировка в лексикографическом порядке.
   Возвращает TRUE в случае успешного завершения  или FALSE в случае возникновения ошибки.
  
| Версия | Описание | 
|---|---|
| 5.4.0 | Добавлены SORT_NATURALиSORT_FLAG_CASEв возможные флаги сортировкиarray1_sort_flags. | 
| 5.3.0 | Добавлен SORT_LOCALE_STRINGв возможные флаги сортировкиarray1_sort_flags. | 
Пример #1 Сортировка нескольких массивов
<?php
$ar1 = array(10, 100, 100, 0);
$ar2 = array(1, 3, 2, 4);
array_multisort($ar1, $ar2);
var_dump($ar1);
var_dump($ar2);
?>
В вышеприведенном примере, после того, как будет осуществлена сортировка, первый массив будет содержать 0, 10, 100, 100. Второй - 4, 1, 2, 3. Элементы второго массива, соответствующие идентичным элементам первого (100 и 100), также будут отсортированы.
array(4) {
  [0]=> int(0)
  [1]=> int(10)
  [2]=> int(100)
  [3]=> int(100)
}
array(4) {
  [0]=> int(4)
  [1]=> int(1)
  [2]=> int(2)
  [3]=> int(3)
}
Пример #2 Сортировка многомерного массива
<?php
$ar = array(
       array("10", 11, 100, 100, "a"),
       array(   1,  2, "2",   3,   1)
      );
array_multisort($ar[0], SORT_ASC, SORT_STRING,
                $ar[1], SORT_NUMERIC, SORT_DESC);
var_dump($ar);
?>
В вышеприведенном примере, после сортировки, первый массив будет содержать "10", 100, 100, 11, "a" (его элементы были отсортированы в возрастающем порядке), а второй массив будет содержать 1, 3, "2", 2, 1 (элементы отсортированы как числа, в порядке убывания).
array(2) {
  [0]=> array(5) {
    [0]=> string(2) "10"
    [1]=> int(100)
    [2]=> int(100)
    [3]=> int(11)
    [4]=> string(1) "a"
  }
  [1]=> array(5) {
    [0]=> int(1)
    [1]=> int(3)
    [2]=> string(1) "2"
    [3]=> int(2)
    [4]=> int(1)
  }
}
Пример #3 Сортировка результатов из базы данных
В этом примере, каждый элемент массива data представляет собой ряд таблицы. Такой тип данных типичен для записей базы данных.
Примерные данные:
# том  | издание
volume | edition
-------+--------
    67 |       2
    86 |       1
    85 |       6
    98 |       2
    86 |       6
    67 |       7
Данные представлены в виде массива с именем data. Обычно их можно получить, к пример, с помощью цикла из функции mysqli_fetch_assoc().
<?php
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
?>
В нашем примере мы будем сортировать по volume в убывающем порядке, а по edition - в возрастающем.
У нас есть массив строк, но array_multisort() необходим массив столбцов, поэтому сначала мы используем следующий код для получения столбцов, а потом выполним сортировку.
<?php
// Получение списка столбцов
foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}
// Сортируем данные по volume по убыванию и по edition по возрастанию
// Добавляем $data в качестве последнего параметра, для сортировки по общему ключу
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
Теперь данные отсортированы и будут выглядеть вот так:
volume | edition
-------+--------
    98 |       2
    86 |       1
    86 |       6
    85 |       6
    67 |       2
    67 |       7
Пример #4 Сортировка без учета регистра
     Обе константы SORT_STRING и
     SORT_REGULAR учитывают регистр при
     сортировке, строки, начинающиеся с заглавной буквы будут
     выставлены раньше строк, начинающихся со строчной буквы.
    
Для выполнения регистронезависимой сортировки, необходимо использовать копию исходного массива приведенную к нижнему регистру.
<?php
$array = array('Alpha', 'atomic', 'Beta', 'bank');
$array_lowercase = array_map('strtolower', $array);
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array);
print_r($array);
?>
Результат выполнения данного примера:
Array
(
    [0] => Alpha
    [1] => atomic
    [2] => bank
    [3] => Beta
)