Array_filter
Glossary overview

Array_filter

Функция array_filter() используется для фильтрации массива, удаляя элементы, которые не соответствуют заданному условию.

Синтаксис

array_filter(array $array, ?callable $callback = null, int $mode = 0): array
  • $array – входной массив.
  • $callback (необязательно) – функция, которая определяет, какие элементы оставить. Если не указана, удаляются все “пустые” (false, null, "", 0, [] и "0").
  • $mode – указывает, передавать ли в callback ключи (ARRAY_FILTER_USE_KEY) или и ключ, и значение (ARRAY_FILTER_USE_BOTH).

Примеры использования

1. Фильтрация “пустых” значений

Если не передавать callback-функцию, array_filter() удаляет все “пустые” значения:

$array = [0, 1, false, 2, '', 3, null, 'hello', [], '0'];

$result = array_filter($array);
print_r($result);

// Вывод
Array ( [1] => 1 [3] => 2 [5] => 3 [7] => hello )

📌 Удалились 0, false, "", null, [], "0".

2. Фильтрация по условию

Оставим только четные числа:

$array = [1, 2, 3, 4, 5, 6];

$result = array_filter($array, function($value) {
    return $value % 2 === 0;
});

print_r($result);

// Вывод
Array ( [1] => 2 [3] => 4 [5] => 6 )

📌 Функция оставила только четные числа (2, 4, 6).

3. Фильтрация строк по длине

Оставим только строки длиной больше 3 символов:

$array = ["hi", "hello", "ok", "world", "php"];

$result = array_filter($array, function($str) {
    return strlen($str) > 3;
});

print_r($result);


// Вывод
Array ( [1] => hello [3] => world )

📌 Остались hello и world.

4. Фильтрация по ключам (ARRAY_FILTER_USE_KEY)

Можно фильтровать по ключам, а не по значениям:

$array = ["a" => 1, "b" => 2, "c" => 3];

$result = array_filter($array, function($key) {
    return $key !== 'b'; // Удаляем элемент с ключом 'b'
}, ARRAY_FILTER_USE_KEY);

print_r($result);

// Вывод
Array ( [a] => 1 [c] => 3 )

📌 Удалён элемент с ключом 'b'.

5. Фильтрация по ключам и значениям (ARRAY_FILTER_USE_BOTH)

Оставим только элементы, где ключ – одна буква, а значение – больше 10:

$array = ["a" => 5, "b" => 15, "c" => 25];

$result = array_filter($array, function($value, $key) {
    return strlen($key) === 1 && $value > 10;
}, ARRAY_FILTER_USE_BOTH);

print_r($result);

// Вывод
Array ( [b] => 15 [c] => 25 )

📌 Удалён a => 5, потому что 5 меньше 10.

Мой пример

 $posts_title_ncris = array_filter( $query_title_ncris->posts, function( $p ) use ( $s ) {
            return stripos( $p->post_title, $s ) !== false;
        });

Этот код выполняет фильтрацию массива записей (posts) из объекта WP_Query ($query_title_ncris), оставляя только те записи, у которых заголовок (post_title) содержит строку $s.

  1. $query_title_ncris->posts – это массив записей (WP_Post), найденных с помощью WP_Query.
  2. array_filter() – оставляет только те элементы, которые удовлетворяют условию в function( $p ).
  3. $p->post_title – заголовок текущей записи.
  4. stripos( $p->post_title, $s ) – выполняет поиск подстроки $s в заголовке (регистр игнорируется).
    • Если $s найден в post_title, stripos() возвращает позицию первого вхождения (например, 0, 5, 10).
    • Если нет вхождения, stripos() возвращает false.
  5. stripos( $p->post_title, $s ) !== false – проверяет, есть ли $s в заголовке.
    • Если true – запись остаётся в массиве.
    • Если false – запись удаляется.

Пример работы кода

Допустим, есть 3 записи в WordPress:

IDЗаголовок (post_title)
1“Fantasy Football Game”
2“Best Casino Experience”
3“Play Fantasy Games Now”

Если $s = "Fantasy", то:

  • "Fantasy Football Game" ✅ (есть Fantasy).
  • "Best Casino Experience" ❌ (нет Fantasy).
  • "Play Fantasy Games Now" ✅ (есть Fantasy).

Результат работы array_filter()

Array (
    [0] => WP_Post ( "Fantasy Football Game" )
    [2] => WP_Post ( "Play Fantasy Games Now" )
)

📌 В итоговом массиве $posts_title_ncris будут только записи, где в заголовке есть “Fantasy”

Когда использовать array_filter()?

✅ Удаление пустых значений (null, false, "", 0, []).
✅ Фильтрация массива по сложным условиям.
✅ Оставление элементов по ключам (ARRAY_FILTER_USE_KEY).
✅ Фильтрация по ключам и значениям одновременно (ARRAY_FILTER_USE_BOTH).