Фильтрует элементы массива через callback-функцию

# array_filter

(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)

array_filter — Фильтрует элементы массива через callback-функцию

### Описание

function array_filter(array `$array`, ?callable `$callback` = `null`, int `$mode` = 0): array

Функция перебирает массив `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-функция изменяет массив — добавляет или удаляет элементы.

### Смотрите также

- array_intersect() - Вычисляет пересечение массивов
- array_find() - Возвращает первый элемент, который удовлетворяет callback-функции
- array_any() - Проверяет, содержит ли массив array хотя бы один элемент, который удовлетворяет callback-функции
- array_map() - Применяет callback-функцию к элементам массивов
- array_reduce() - Итеративно сводит массив к единственному значению через callback-функцию

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open