array_multisort Сортирует набор массивов или многомерные массивы &reftitle.description; truearray_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.true.always; &reftitle.changelog; &Version; &Description; 8.5.0 Теперь тип возвращаемого значения — &true;; ранее был bool. &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. В следующем примере функция отсортирует данные по полю volume по убыванию, а по полю edition — по возрастанию. Мы получили массив строк базы данных, но функция array_multisort требует массив столбцов, поэтому сначала вызовем код, который получит столбцы, а затем отсортируем данные. 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); // Получаем список столбцов foreach ($data as $key => $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); // Перебираем данные и выводим отсортированные значения для каждого столбца echo 'volume | edition', PHP_EOL; echo '-------+--------', PHP_EOL; for ($i = 0; $i < count($data); $i++) { printf("%6d | %7d\n", $volume[$i], $edition[$i]); } ?> ]]> Функция отсортировала набор данных и теперь он выглядит вот так: Сортировка без учёта регистра Обе константы — SORT_STRING и SORT_REGULAR — учитывают регистр при сортировке, поэтому строки, которые начинаются с заглавной буквы, будут идти раньше строк, которые начинаются со строчной буквы. Чтобы отсортировать данные без учёта регистра, порядок сортировки определяют для копии исходного массива, которую привели к нижнему регистру. ]]> &example.outputs; Alpha [1] => atomic [2] => bank [3] => Beta ) ]]> &reftitle.seealso; usort &seealso.array.sorting;