(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
array_filter — Фильтрует элементы массива через callback-функцию
Функция перебирает массив array
и передаёт каждое значение в callback-функцию.
Текущее значение массива array копируется в массив (array) с результатами,
если callback-функция возвращает true.
Функция сохраняет ключи входного индексного массива array,
поэтому после фильтрации иногда появляются пропуски.
Массив (array) с результатами переиндексируют функцией array_values().
arrayМассив, который требуется перебрать.
callbackCallback-функция.
Функция удалит пустые элементы входного массива array,
если callback-функцию не передали. Описание
языковой конструкции empty() рассказывает,
как PHP определяет пустые элементы.
mode
Флаг определяет, какие аргументы передавать в callback-функцию:
ARRAY_FILTER_USE_KEY —
вместо значения массива как единственного аргумента
callback-функции передавать только ключ массива.
ARRAY_FILTER_USE_BOTH —
вместо значения массива как единственного аргумента
callback-функции передавать и значение — первым аргументом,
и ключ массива — вторым аргументом.
0,
с которым в callback-функцию передаётся
только значение массива.
Функция возвращает отфильтрованный массив.
| Версия | Описание |
|---|---|
| 8.0.0 |
Параметр callback теперь принимает значение null.
|
| 8.0.0 |
Теперь функция выдаст ошибку уровня E_WARNING,
если параметр callback ожидает,
что значение передадут по ссылке.
|
Пример #1 Пример использования функции array_filter()
<?php
function odd($var)
{
// Функция возвращает информацию о том, нечётно ли входное целое число
return $var & 1;
}
function even($var)
{
// Функция возвращает информацию о том, чётно ли входное целое число
return !($var & 1);
}
$array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];
$array2 = [6, 7, 8, 9, 10, 11, 12];
echo "Нечётные:\n";
print_r(array_filter($array1, "odd"));
echo "Чётные:\n";
print_r(array_filter($array2, "even"));
?>Результат выполнения приведённого примера:
Нечётные:
Array
(
[a] => 1
[c] => 3
[e] => 5
)
Чётные:
Array
(
[0] => 6
[2] => 8
[4] => 10
[6] => 12
)
Пример #2
Пример вызова функции array_filter()
без аргумента callback
<?php
$entry = [
0 => 'foo',
1 => false,
2 => -1,
3 => null,
4 => '',
5 => '0',
6 => 0,
];
print_r(array_filter($entry));
?>Результат выполнения приведённого примера:
Array
(
[0] => foo
[2] => -1
)
Пример #3
Пример вызова функции array_filter()
с флагом mode
<?php
$arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4];
var_dump(
array_filter(
$arr,
function ($k) {
return $k == 'b';
},
ARRAY_FILTER_USE_KEY
)
);
var_dump(
array_filter(
$arr,
function ($v, $k) {
return $k == 'b' || $v == 4;
},
ARRAY_FILTER_USE_BOTH
)
);
?>Результат выполнения приведённого примера:
array(1) {
["b"]=>
int(2)
}
array(2) {
["b"]=>
int(2)
["d"]=>
int(4)
}
Поведение функции будет неопределённым, если callback-функция изменяет массив — добавляет или удаляет элементы.