php. Сортировка массива по нескольким полям
Данный материал предоставлен сайтом
PacificSky.Ru исключительно в ознакомительных целях. Администрация не несет ответственности за его содержимое.
Сортировка массива по нескольким полям/колонкам
Представим, что у нас есть список мебели, где указан тип мебели (категория) и название.
И нам нужно отсортировать массив, сначала по категории, а потом внутри категории по по названию.
Наш массив будет выглядеть следующим образом:
В массиве категории и названия перемешаны в хаотичном порядке.
Для сортировки массива воспользуемся функцией usort.
Внутри функции usort, отсортируем массив по алфавиту, по категории "category" с сортировкой по алфавиту.
В случае, если категории сравниваемых элементов массива равны, то сравниваем по имени "name" и возвращаем направление сортировки в виде значений 1,-1 и 0.
usort($array, function ($a, $b) {
if ($a['category'] === $b['category']) {
if ($a['name'] < $b['name']) {
return -1;
}
if ($a['name'] > $b['name']) {
return 1;
}
if ($a['name'] <=> $b['name']) {
return 0;
}
}
if ($a['category'] < $b['category']) {
return -1;
}
if ($a['category'] > $b['category']) {
return 1;
}
});
После выполнения функции usort массив $array будет выглядеть следующим образом:
Поставленная задача выполнена. Мы отсортировали массив по категориям и после этого в каждой категории отсортировали мебель по алфавиту.
Весь код из данного примера:
Начиная с версии php 7.0 появился оператор spaceship <=> (Космический корабль). С помощью данного оператора можно сократить длину кода в функции usort:
usort($array, function ($a, $b) {
if ($a['category'] === $b['category']) {
return $a['name'] <=> $b['name'];
}
if ($a['category'] < $b['category']) {
return -1;
}
if ($a['category'] > $b['category']) {
return 1;
}
});
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.