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 адреса не оприлюднюватиметься. Обов’язкові поля позначені *