wp_list_sort()WP 4.7.0

Сортирует массив объектов или массив массивов по одному или нескольким полям.

Удобно использовать для последующей сортировки результатов запроса, например записей.

Смотрите также PHP функцию array_multisort(). Возможно она подойдет лучше для нестандартных вариантов сортировки массивов.

Работает на основе: WP_List_Util()

Хуков нет.

Возвращает

Массив. Отсортированный массив.

Использование

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

#1 Пример сортировки массива объектов (постов)

Допустим мы получили записи из БД. Затем с ними что-нибудь сделали. Например проверили и некоторые удалили. Теперь нужно их отсортировать.

// получим массив объектов, тут это записи...
$posts = get_posts( [ 'posts_per_page'=>15 ] );

// делаем с ними чего-нибудь

// сортируем по заголовку от А до Я
$posts = wp_list_sort( $posts, 'post_title', 'ASC' );

// или так
$posts = wp_list_sort( $posts, [ 'post_title'=>'ASC' ] );
0

#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    ]
]
*/
0

#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().

0

#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 6.5.2

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 );
}