PHP array_filter() — это встроенная функция PHP, которая фильтрует элементы массива с помощью встроенной функции PHP или пользовательской функции обратного вызова.
array_filter(array, callback, flag);
Функция array_filter() передает каждое значение входного массива в функцию обратного вызова. Если функция callback возвращает true, текущее значение из array возвращается в массив результатов, в противном случае нет. Функция обратного вызова должна возвращать значение true или false.
Ключи массива сохраняются и могут привести к пробелам, если array был проиндексирован.
arrayRequiredУказывает массив для фильтрацииcallbackOptionalФункция обратного вызова. Это может быть встроенная функция PHP или пользовательская. Если callback не указано, все пустые элементы массива будут удалены.
Начиная с PHP 8.0.0 эта функция может иметь значение null.flagOptionalУказывает, какие аргументы отправляются в обратный вызов:ARRAY_FILTER_USE_KEY — передает ключ в качестве единственного аргумента в callback вместо значенияARRAY_FILTER_USE_BOTH — передает и значение, и ключ в качестве аргументов в callback вместо значения
Значение по умолчанию — 0, которое передает значение в качестве единственного аргумента вместо этого на callback. Возвращаемое значение Возвращает отфильтрованный массив.
Эта функция доступна в PHP, начиная с версии 4.0.6.
Пример встроенной функции PHP:
$cars = array(1 => 'Ferrari', 2 => 2, 3 => 'BMW'); var_dump(array_filter($cars, 'is_string'));
Выход
array (size=2) 1 => string 'Ferrari' (length=7) 3 => string 'BMW' (length=3)
В этом примере проверяется, является ли элемент строкой или нет.
Пример пользовательской функции:
$cars = array(1 => 'Ferrari', 2 => 2, 3 => 'BMW');
function findString($value)
{
return is_string($value);
}
var_dump(array_filter($cars, 'findString'));
Выход
array (size=2) 1 => string 'Ferrari' (length=7) 3 => string 'BMW' (length=3)
ARRAY_FILTER_USE_KEY
В PHP 5.6 появился третий параметр array_filter(), называемый flag, который можно установить в ARRAY_FILTER_USE_KEY для фильтрации по ключу, а не по значению.
ARRAY_FILTER_USE_BOTH
Вы можете установить его в ARRAY_FILTER_USE_BOTH для фильтрации по ключу или значению.
Как отфильтровать массив по ключу и значению с помощью PHP array_filter()
Чтобы отфильтровать массив по его ключам или значениям, вы можете использовать опцию «флаг», как в следующем коде.
Фильтр по ключу:
$cars = array(1 => 'Ferrari', 2 => 'Benz', 3 => 'BMW', 4 => 'Volvo');
var_dump(array_filter($cars, function ($key) {
return $key == 2;
}, ARRAY_FILTER_USE_KEY));
Выход
array (size=1) 2 => string 'Benz' (length=4)
Фильтровать по ключу и значению
$cars = array(1 => 'Ferrari', 2 => 'Benz', 3 => 'BMW', 4 => 'Volvo');
var_dump(array_filter($cars, function ($value, $key) {
return $key == 4 || $value == 'Ferrari';
}, ARRAY_FILTER_USE_BOTH));
Выход
array (size=2) 1 => string 'Ferrari' (length=7) 4 => string 'Volvo' (length=5)
Фильтрация многомерного массива в PHP
$cars = array(
array('name' => 'Ferrari', 'rate' => 5),
array('name' => 'Benz', 'rate' => 5),
array('name' => 'BMW', 'rate' => 4),
array('name' => 'Volvo', 'rate' => 4)
);
var_dump(array_filter($cars, function ($car) {
return $car['rate'] == 5;
}));
Выход
array (size=2)
0 =>
array (size=2)
'name' => string 'Ferrari' (length=7)
'rate' => int 5
1 =>
array (size=2)
'name' => string 'Benz' (length=4)
'rate' => int 5
Удалить пустые и нулевые значения из массива
Вы можете использовать функцию PHP array_filter() для удаления пустых или нулевых значений массива. Для этого игнорируйте часть функции обратного вызова.
$cars = array(1 => 'Ferrari', 2 => '', 3 => 'BMW', 4 => null); var_dump(array_filter($cars));
Выход:
array (size=2) 1 => string 'Ferrari' (length=7) 3 => string 'BMW' (length=3)
Вы можете удалить любое значение из массива, который представляет пустые, нулевые или нулевые значения.
$entry = array(
0 => 'foo',
1 => false,
2 => -1,
3 => null,
4 => '',
5 => '0',
6 => 0,
);
var_dump(array_filter($entry));
Выход
array (size=2) 0 => string 'foo' (length=3) 2 => int -1
Массив фильтров без функции array_filter() в PHP
Если вы не хотите использовать функцию array_filter(), у вас есть альтернативы этой функции. Вместо этого вы можете использовать for или foreach цикл или любой другой цикл.
$cars = array(1 => 'Ferrari', 2 => 'Benz', 3 => 'BMW', 4 => 'Volvo');
$filtered_cars = [];
foreach ($cars as $key => $value) {
if ($key == 2) {
$filtered_cars[$key] = $value;
}
}
var_dump($filtered_cars);
Выход:
array (size=1) 2 => string 'Benz' (length=4)
Этот пример обращается к каждому элементу и проверяет, равен ли его ключ 2 или нет. Если ключ элемента равен 2, значение будет добавлено в массив filtered_cars. В основном это похоже на поиск в массиве или итерацию массива.
Подробнее:Добавить элемент в массив PHP
Как видите, вам нужно приложить больше усилий и кода для фильтрации массива в этом методе.
Использование обратного вызова PHP array_filter в качестве метода класса
Вы можете передать метод класса в функцию array_filter(). Метод должен возвращать значение true или false.
array_filter($array, [$instance, 'callback']);
$cars = array(1 => 'Ferrari', 2 => 'Benz', 3 => 'BMW', 4 => 'Volvo');
class Obj
{
public function isFerrari($value)
{
return $value === 'Ferrari';
}
}
var_dump(array_filter($cars, array(new Obj, 'isFerrari')));
Выход:
array (size=1) 1 => string 'Ferrari' (length=7)
Если у вас есть класс со статическим методом, вы передаете статический метод в качестве обратного вызова функции array_filter(), вы можете использовать приведенный ниже синтаксис.
array_filter($array, ['className', 'callback']);
Например:
$cars = array(1 => 'Ferrari', 2 => 'Benz', 3 => 'BMW', 4 => 'Volvo');
class Obj
{
public static function isFerrari($value)
{
return $value === 'Ferrari';
}
}
var_dump(array_filter($cars, array('Obj', 'isFerrari')));
Выход
array (size=1) 1 => string 'Ferrari' (length=7)
Более
- Массив PHP
- функция PHP array_filter()
- Длина массива PHP