Функция 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.
$query_title_ncris->posts– это массив записей (WP_Post), найденных с помощьюWP_Query.array_filter()– оставляет только те элементы, которые удовлетворяют условию вfunction( $p ).$p->post_title– заголовок текущей записи.stripos( $p->post_title, $s )– выполняет поиск подстроки$sв заголовке (регистр игнорируется).- Если
$sнайден вpost_title,stripos()возвращает позицию первого вхождения (например,0, 5, 10). - Если нет вхождения,
stripos()возвращаетfalse.
- Если
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).
