array_multisort
Сортирует несколько массивов или многомерные массивы
&reftitle.description;
boolarray_multisort
arrayarray1
mixedarray1_sort_orderSORT_ASC
mixedarray1_sort_flagsSORT_REGULAR
mixedrest
Функцией array_multisort пользуются для
одновременной сортировки нескольких массивов или одного многомерного массива
по одному или несколькими уровням вложенности.
Ассоциативные строковые (string) ключи будут сохранены, но
числовые ключи будут переиндексированы.
¬e.sort-unstable;
¬e.reset-index;
&reftitle.parameters;
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 — разрешено объединять (бинарным ИЛИ) с
SORT_STRING или
SORT_NATURAL для сортировки без учёта регистра
Этот аргумент разрешено менять местами с параметром array1_sort_order
или не указывать, тогда за основу будет взято значение SORT_REGULAR.
rest
Дополнительные массивы, необязательно следующие после порядка сортировки и флагов.
Сравниваются только элементы, которые соответствуют таким же элементам в
предыдущих массивах. То есть массивы сортируются в
лексикографическом порядке.
&reftitle.returnvalues;
&return.success;
&reftitle.examples;
Сортировка нескольких массивов
]]>
В приведённом примере после окончания сортировки
первый массив будет содержать значения: 0, 10, 100, 100.
Второй — 4, 1, 2, 3. Элементы второго массива, которые соответствуют
тем же элементам первого массива (100 и 100), также будут отсортированы.
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)
}
]]>
Сортировка многомерного массива
]]>
В приведённом примере после окончания сортировки первый массив
будет содержать значения: "10", 100, 100, 11, "a" (его элементы были отсортированы в
возрастающем порядке), а второй массив — 1, 3, "2", 2, 1
(элементы отсортированы как числа, в порядке убывания).
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)
}
}
]]>
Сортировка результатов из базы данных
В этом примере каждый элемент массива data —
это строка таблицы. Такой набор данных типичен для
записей базы данных.
Примерные данные:
Данные в виде массива с именем data. Обычно
их можно получить, например, с в цикле функции mysqli_fetch_assoc.
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
требует массив столбцов, поэтому сначала будет вызван следующий код,
чтобы получить столбцы, а потом данные будут отсортирован.
$row) {
$volume[$key] = $row['volume'];
$edition[$key] = $row['edition'];
}
// Получение тех же данных функцией array_column() вместо перебора
$volume = array_column($data, 'volume');
$edition = array_column($data, 'edition');
// Сортируем данные по полю volume по убыванию и по полю edition по возрастанию
// Добавляем переменную $data в качестве последнего параметра, для сортировки по общему ключу
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>
]]>
Теперь данные отсортированы и будут выглядеть вот так:
Сортировка без учёта регистра
Обе константы SORT_STRING и
SORT_REGULAR учитывают регистр при
сортировке, строки, начинающиеся с заглавной буквы, будут
выставлены раньше строк, начинающихся со строчной буквы.
Для регистронезависимой сортировки, нужно
работать с копией исходного массива, приведённого
к нижнему регистру.
]]>
&example.outputs;
Alpha
[1] => atomic
[2] => bank
[3] => Beta
)
]]>
&reftitle.seealso;
usort
&seealso.array.sorting;