array_multisort
Сортирует несколько массивов или многомерные массивы
&reftitle.description;
boolarray_multisort
arrayarray1
mixedarray1_sort_orderSORT_ASC
mixedarray1_sort_flagsSORT_REGULAR
mixedrest
Функция array_multisort может быть использована для
сортировки сразу нескольких массивов или одного многомерного массива
в соответствии с одной или несколькими размерностями.
Ассоциативные (string) ключи будут сохранены, но
числовые ключи будут переиндексированы.
¬e.sort-unstable;
&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'];
}
// Начиная с PHP 5.5.0 вы можете использовать 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;