wp_list_filter() WP 3.1.0

Фільтрує масив об’єктів (або масив масивів) і отримує з масиву ті об’єкти, які мають зазначений нами параметр.

Наприклад, у нас є масив об’єктів і нам потрібно отримати з цього масиву об’єкт у значенні якого поле 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_filter ($ list, $ args, $ operator);
$list
(масив) (обов’язковий)
Масив об’єктів, з яким працюватимемо.
$args
(масив)
Параметри, за якими потрібно вибирати об’єкти. Вказуємо в масиві
key => val. val не може бути масивом з кількох значень – тільки одне значення…


array ()
$operator
(рядок)

Вказує, як обробляти вказані в $args параметри. Може бути:

За замовчуванням: ‘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) поверне цей об'єкт.
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.0Uses WP_List_Util class.
З версії 5.9.0Перевірено на wrapper for wp_filter_object_list() .

wp list filter WP 6.0.2

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *