(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
Массив, который требуется перебрать.
callback
Callback-функция.
Функция удалит пустые элементы входного массива 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-функция изменяет массив — добавляет или удаляет элементы.