Функция wp_list_sort()
позволяет сортировать массив объектов или многомерных массивов на основе одного или нескольких полей. Она полезна для упорядочивания данных, таких как результаты запроса записей, массивы объектов и прочие структурированные данные. В этой статье рассмотрим возможности этой функции, ее параметры, примеры использования и несколько приемов для более сложных случаев сортировки.
wp_list_sort( array $input_list, string|array $orderby = array(), string $order = 'ASC', bool $preserve_keys = false ): array
Параметры:
$input_list
(массив) — массив объектов или многомерный массив для сортировки.$orderby
(строка или массив) — название поля для сортировки или массив полей и их направлений (например,[ 'field' => 'ASC', 'another_field' => 'DESC' ]
). По умолчанию пустой массив.$order
(строка) — направление сортировки. Может бытьASC
илиDESC
. Используется только если$orderby
задано строкой. По умолчаниюASC
.$preserve_keys
(логический) — нужно ли сохранять ключи массива. Еслиtrue
, ключи сохраняются. По умолчаниюfalse
.
Возвращаемое значение: Массив, отсортированный в соответствии с переданными критериями.
Пример 1: Сортировка по одному полю
Для начала отсортируем простой массив животных по полю class
:
$animals = [
'crocodile' => [ 'name' => 'crocodile', 'fly' => false, 'class' => 'reptile' ],
'whale' => [ 'name' => 'whale', 'fly' => false, 'class' => 'mammal' ],
'eagle' => [ 'name' => 'eagle', 'fly' => true, 'class' => 'bird' ],
'lion' => [ 'name' => 'lion', 'fly' => false, 'class' => 'mammal' ],
'parrot' => [ 'name' => 'parrot', 'fly' => true, 'class' => 'bird' ],
];
$sorted_animals = wp_list_sort($animals, 'class', 'ASC');
print_r($sorted_animals);
/*
Результат:
Array
(
[0] => Array ( [name] => eagle, [fly] => true, [class] => bird )
[1] => Array ( [name] => parrot, [fly] => true, [class] => bird )
[2] => Array ( [name] => lion, [fly] => false, [class] => mammal )
[3] => Array ( [name] => whale, [fly] => false, [class] => mammal )
[4] => Array ( [name] => crocodile, [fly] => false, [class] => reptile )
)
*/
Пример 2: Сортировка в обратном порядке по имени
Для сортировки массива в обратном порядке используйте 'DESC'
в параметре $order
:
$sorted_animals = wp_list_sort($animals, 'name', 'DESC');
print_r($sorted_animals);
/*
Результат:
Array
(
[0] => Array ( [name] => whale, [fly] => false, [class] => mammal )
[1] => Array ( [name] => parrot, [fly] => true, [class] => bird )
[2] => Array ( [name] => lion, [fly] => false, [class] => mammal )
[3] => Array ( [name] => eagle, [fly] => true, [class] => bird )
[4] => Array ( [name] => crocodile, [fly] => false, [class] => reptile )
)
*/
Пример 3: Сохранение ключей при сортировке
При использовании $preserve_keys = true
оригинальные ключи массива сохраняются:
$sorted_animals = wp_list_sort($animals, 'name', 'ASC', true);
print_r($sorted_animals);
/*
Результат:
Array
(
[crocodile] => Array ( [name] => crocodile, [fly] => false, [class] => reptile )
[eagle] => Array ( [name] => eagle, [fly] => true, [class] => bird )
[lion] => Array ( [name] => lion, [fly] => false, [class] => mammal )
[parrot] => Array ( [name] => parrot, [fly] => true, [class] => bird )
[whale] => Array ( [name] => whale, [fly] => false, [class] => mammal )
)
*/
Пример 4: Сортировка по нескольким полям
Для более сложной сортировки по нескольким полям можно передать массив с полями и их направлениями. В этом примере сначала отсортируем массив по class
, а затем по name
в порядке возрастания:
$sorted_animals = wp_list_sort($animals, [ 'class' => 'ASC', 'name' => 'ASC' ]);
print_r($sorted_animals);
/*
Результат:
Array
(
[0] => Array ( [name] => eagle, [fly] => true, [class] => bird )
[1] => Array ( [name] => parrot, [fly] => true, [class] => bird )
[2] => Array ( [name] => lion, [fly] => false, [class] => mammal )
[3] => Array ( [name] => whale, [fly] => false, [class] => mammal )
[4] => Array ( [name] => crocodile, [fly] => false, [class] => reptile )
)
*/
Пример 5: Сортировка по нескольким полям с сохранением ключей
Если требуется сортировать по нескольким полям с сохранением оригинальных ключей массива, указываем true
в параметре $preserve_keys
:
$sorted_animals = wp_list_sort($animals, [ 'class' => 'DESC', 'name' => 'ASC' ], '', true);
print_r($sorted_animals);
/*
Результат:
Array
(
[whale] => Array ( [name] => whale, [fly] => false, [class] => mammal )
[lion] => Array ( [name] => lion, [fly] => false, [class] => mammal )
[parrot] => Array ( [name] => parrot, [fly] => true, [class] => bird )
[eagle] => Array ( [name] => eagle, [fly] => true, [class] => bird )
[crocodile] => Array ( [name] => crocodile, [fly] => false, [class] => reptile )
)
*/
Заключение
Функция wp_list_sort()
— мощный инструмент для сортировки массивов объектов или данных в WordPress. Она позволяет гибко настраивать сортировку по одному или нескольким полям, выбирать направление сортировки и сохранять ключи массива. В сочетании с другими функциями сортировки, такими как usort()
, эта функция упрощает работу с данными и оптимизирует обработку массивов в различных сценариях.