wp_list_filter()WP 3.1.0

Фильтрует массив объектов (или массив массивов) и получает из массива те объекты, у которых есть указанный нами параметр.

Например, у нас есть массив объектов и нам нужно получить из этого массива объект в значении которого поле post_title равно my title. Для этого в параметр $list передаем исходный массив объектов, а в $args указываем параметры отбора: [ 'post_title' => 'my title' ]. В результате, функция вернет новый массив с нужным нам объектом.

Важно: ключи основного массива сохраняются! Т.е. Ключи элементов в результирующем массиве будут такие же какие были в основном, а не по-порядку (0 1 2). Т.е. нельзя получать первый элемент как $result_array[0].

Поэтому, чтобы получить первый элемент массива используйте функцию array_shift() или reset().

Работает на раннем этапе загрузки WordPress, еще до константы SHORTINIT.

Различия между: wp_list_filter() и wp_filter_object_list()

  • wp_list_filter( $list, $args, $operator ) — фильтрует переданный массив и возвращает его элементы как есть (полностью), например если в значении был объект, то вернется весь объект.
  • wp_filter_object_list( $list, $args, $operator, $field ) — работает точно также. Но если указать 4-й параметр $field, то после фильтрации массива, сработает функция wp_list_pluck() и из значений отфильтрованного массива будет взято только указанное в 4-м параметре поле (ключ).
Работает на основе: wp_filter_object_list()
1 раз — 0.000001 сек (скорость света) | 50000 раз — 0.12 сек (очень быстро) | PHP 7.4.25, WP 5.9

Хуков нет.

Возвращает

Массив. Массив, который был получен после выборки.

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

wp_list_filter( $input_list, $args, $operator );
$list(массив) (обязательный)
Массив объектов, с которым будем работать.
$args(массив)
Параметры по которым нужно выбирать объекты. Указываем в массиве key => val. val не может быть массивом из нескольких значений - только одно значение...
По умолчанию: array()
$operator(строка)

Указывает как обрабатывать указанные в $args параметры. Может быть:

  • OR — оставит объекты у которых есть любой из указанных параметров.
  • AND — оставит объекты объекты у которых есть одновременно все указанные параметры.
  • NOT — оставит объекты у которых нет указанных параметров.

По умолчанию: 'AND'

Примеры

0

#1 Проверим наличие объекта с указанным значением в массиве

Есть массив объектов постов. Нам нужно проверить если ли среди постов, пост с заголовком 'some_title':

global $posts;
$title = 'some_title';
$the_post = wp_list_filter( $posts, [ 'post_title' => $title ] );

// если в массиве постов $posts есть пост с заголовком 'some_title', то
// array_shift($the_post) вернет этот объект.
0

#2 Демонстрация работы функции

Предположим у нас есть массив объектов. В каждом объекте есть поле count и в некоторых оно равно 0. Нам нужно получить все объекты массива значение count которых не 0, но не одинаковое. И тоже самое сделаем с массивом массивов.

Массив объектов:

$objects_array = [

	57 => (object) [
		'parent' => 80,
		'count' => 9,
	],

	58 => (object) [
		'parent' => 80,
		'count' => 0,
	],

	59 => (object) [
		'parent' => 80,
		'count' => 4,
	],

];

$filtered_array = wp_list_filter( $objects_array, [ 'count' => true ] );

/*
$filtered_array = Array
(
	[57] => stdClass Object
		(
			[parent] => 80
			[count] => 9
		)

	[59] => stdClass Object
		(
			[parent] => 80
			[count] => 4
		)

)
*/

Массив массивов:

$arrays_array = [

	57 => [
		'parent' => 80,
		'count' => 9,
	],

	58 => [
		'parent' => 80,
		'count' => 0,
	],

	59 => [
		'parent' => 80,
		'count' => 4,
	],

];

$filtered_array = wp_list_filter( $arrays_array, [ 'count' => true ] );

/*
$filtered_array = Array
(
	[57] => Array
		(
			[parent] => 80
			[count] => 9
		)

	[59] => Array
		(
			[parent] => 80
			[count] => 4
		)

)
*/
0

#3 Соберем элементы без указания ключа

$arr = [ 'foo', 'bar', 'foo', 'bar' ];
$list = wp_list_filter( $arr, array('bar') );

/*
Array
(
	[1] => bar
	[3] => bar
)
*/
0

#4 Еще примеры

Еще примеры смотрите в описании функции: wp_filter_object_list()

Список изменений

С версии 3.1.0 Введена.
С версии 4.7.0 Uses WP_List_Util class.
С версии 5.9.0 Converted into a wrapper for wp_filter_object_list().

Код wp_list_filter() WP 6.7.1

function wp_list_filter( $input_list, $args = array(), $operator = 'AND' ) {
	return wp_filter_object_list( $input_list, $args, $operator );
}