WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

wp_list_filter() WP 3.0

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

Ищем WP-разработчика! Фулл-тайм, удаленка, хорошая зарплата, соц. пакет. Подробности.
Компания Boosta.

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

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

Работает на раннем этапе загрузки 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_List_Util()
1 раз — 0.000001 сек (скорость света) | 50000 раз — 0.09 сек (скорость света) | PHP 7.4.8, WP 5.6.2

Хуков нет.

Возвращает

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

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

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

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

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

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

Примеры

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

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

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

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

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

)
*/

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

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

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

Еще примеры

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

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

С версии 3.1.0 Введена.
С версии 4.7.0 Uses WP_List_Util class.

Код wp_list_filter() WP 5.8.2

function wp_list_filter( $list, $args = array(), $operator = 'AND' ) {
	if ( ! is_array( $list ) ) {
		return array();
	}

	$util = new WP_List_Util( $list );

	return $util->filter( $args, $operator );
}

array list help func (фильтры сортировка массивов объектов)

Вспомогательные

Комментариев нет
    Войти