WordPress как на ладони
wordpress jino

wp_list_filter() WP 3.0

Фильтрует массив объектов и получает из массива те объекты, которые подходят по указанным параметрам (key=>value).

Например, у нас есть массив объектов и нам нужно получить из этого массива объект в значении которого поле 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_Util()

Хуков нет.

Возвращает

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

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

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, array('post_title'=>$title) );

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

#2 Соберем объекты по не пустому элементу

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

/* $array у нас такой массив
[57] => stdClass Object
		(
			[parent] => 80
			[count] => 9
		)

[58] => stdClass Object
		(
			[parent] => 80
			[count] => 0
		)

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

$need_array = wp_list_filter( $array, array('count' => true) );

/*
$need_array будет равен:
[57] => stdClass Object
		(
			[parent] => 80
			[count] => 9
		)

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

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

$arr = ['foo', 'bar', 'foo', 'bar', ];
$done = wp_list_filter($arr, ['bar']);
print_r($done);

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

Еще примеры

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

Код wp list filter: wp-includes/functions.php WP 4.9

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

Cвязанные функции

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

Еще из раздела: Вспомогательные

wp_list_filter Комментариев нет

Здравствуйте, !

Ваш комментарий