wp_list_filter()
Фільтрує масив об’єктів (або масив масивів) і отримує з масиву ті об’єкти, які мають зазначений нами параметр.
Наприклад, у нас є масив об’єктів і нам потрібно отримати з цього масиву об’єкт у значенні якого поле 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-му параметрі поле (ключ).
1 раз – 0.000001 сек
(швидкість світла) | 50000 разів – 0.12 сек
(дуже швидко) |
PHP 7.4.25, WP 5.9
Хуків немає.
Повертає
Массив
. Масив, отриманий після вибірки.
Використання
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 ) */
#4 Ще приклади
Ще приклади дивіться у описі функції: wp_filter_object_list()
список змін
З версії 3.1.0 | Введено. |
З версії 4.7.0 | Uses 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); }