wp_list_sort()
Сортирует массив объектов или массив массивов по одному или нескольким полям.
Удобно использовать для последующей сортировки результатов запроса, например записей.
Смотрите также PHP функцию array_multisort(). Возможно она подойдет лучше для нестандартных вариантов сортировки массивов.
Хуков нет.
Возвращает
Массив
. Отсортированный массив.
Использование
wp_list_sort( $list, $orderby, $order, $preserve_keys );
- $list(массив) (обязательный)
- Массив объектов, которые нужно отсортировать.
- $orderby(строка/массив)
- Название поля по которому нужно сортировать. Можно указать массив из нескольких названий: array('поле'=>'порядок', 'post_name'=>'ASC')
По умолчанию: array() - $order(строка)
- Порядок сортировки. Может быть: 'ASC' или 'DESC'. Используется только если в предыдущем параметре указана строка.
По умолчанию: 'ASC' - $preserve_keys(логический)
- Нужно ли сохранить ключи массива при сортировке. true - сохранить или false - не сохранять.
По умолчанию: false
Примеры
#1 Пример сортировки массива объектов (постов)
Допустим мы получили записи из БД. Затем с ними что-нибудь сделали. Например проверили и некоторые удалили. Теперь нужно их отсортировать.
// получим массив объектов, тут это записи... $posts = get_posts( [ 'posts_per_page'=>15 ] ); // делаем с ними чего-нибудь // сортируем по заголовку от А до Я $posts = wp_list_sort( $posts, 'post_title', 'ASC' ); // или так $posts = wp_list_sort( $posts, [ 'post_title'=>'ASC' ] );
#2 Пример сортировка многомерного массива
$animals = [ 'alligator' => [ 'name' => 'alligator', 'class' => 'reptile' ], 'dog' => [ 'name' => 'dog', 'class' => 'mammal' ], 'cat' => [ 'name' => 'cat', 'class' => 'mammal' ], 'falcon' => [ 'name' => 'falcon', 'class' => 'bird' ], 'bat' => [ 'name' => 'bat', 'class' => 'mammal' ], ]; $res = wp_list_sort( $animals, 'class' ); print_r( $res ); /* [ 0 => [ name => falcon, class => bird ] 1 => [ name => cat, class => mammal ] 2 => [ name => dog, class => mammal ] 3 => [ name => bat, class => mammal ] 4 => [ name => alligator, class => reptile ] ] */ $res = wp_list_sort( $animals, 'name', 'DESC' ); print_r( $res ); /* [ 0 => [ name => falcon, class => bird ] 1 => [ name => dog, class => mammal ] 2 => [ name => cat, class => mammal ] 3 => [ name => bat, class => mammal ] 4 => [ name => alligator, class => reptile ] ] */ $res = wp_list_sort( $animals, 'name', 'ASC', true ); print_r( $res ); /* [ alligator => [ name => alligator, class => reptile ] bat => [ name => bat, class => mammal ] cat => [ name => cat, class => mammal ] dog => [ name => dog, class => mammal ] falcon => [ name => falcon, class => bird ] ] */
#3 Сортировка по несколькими полям
Функция также позволяет сортировать массив массивов или объектов по нескольким полям сразу:
$array = [ 'a' => [ 'type'=>'Sedan', 'color'=>'Silver' ], 'c' => [ 'type'=>'Universal', 'color'=>'Black' ], 'b' => [ 'type'=>'Сoupe', 'color'=>'White' ], 'd' => [ 'type'=>'Сoupe', 'color'=>'Purple' ], ]; $array = wp_list_sort( $array, [ 'type'=>'DESC', 'color'=>'ASC' ] ); print_r( $array ); /* Array ( [0] => Array ( [type] => Сoupe [color] => Purple ) [1] => Array ( [type] => Сoupe [color] => White ) [2] => Array ( [type] => Universal [color] => Black ) [3] => Array ( [type] => Sedan [color] => Silver ) ) */
Смотрите также сортировку по несколькими полям через произвольную функцию usort().
#4 Сортировка по нескольким полям с сохранением индексов массива
По умолчанию индексы массива не сохраняются, но это можно исправить передав 4-й параметр. Тут возникает вопрос как быть, если мы во втором параметре указываем массив, то что указывать в 3-м параметре?
Если во втором параметре указывается массив, то третий параметр просто игнорируется и мы можем указать там что угодно, чтобы затем указать четвертый параметр:
$array = [ 'a' => [ 'type'=>'Sedan', 'color'=>'Silver' ], 'c' => [ 'type'=>'Universal', 'color'=>'Black' ], 'b' => [ 'type'=>'Сoupe', 'color'=>'White' ], 'd' => [ 'type'=>'Сoupe', 'color'=>'Purple' ], ]; $array = wp_list_sort( $array, [ 'type'=>'DESC', 'color'=>'ASC' ], '', true ); print_r( $array ); /* Array [d] => Array [type] => Сoupe [color] => Purple [b] => Array [type] => Сoupe [color] => White [c] => Array [type] => Universal [color] => Black [a] => Array [type] => Sedan [color] => Silver ) */
Список изменений
С версии 4.7.0 | Введена. |
Код wp_list_sort() wp list sort WP 6.7.1
function wp_list_sort( $input_list, $orderby = array(), $order = 'ASC', $preserve_keys = false ) { if ( ! is_array( $input_list ) ) { return array(); } $util = new WP_List_Util( $input_list ); return $util->sort( $orderby, $order, $preserve_keys ); }