Filtra elementos de um array utilizando uma função callback

# array_filter

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

array_filter — Filtra elementos de um array utilizando uma função callback

### Descrição

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

Itera sobre cada valor de `array` passando-os para a função `callback`. Se a função `callback` retornar `true`, o valor atual de `array` é retornado no array resultante.

Chaves do array são preservadas,e podem resultar em lacunas se o `array` foi indexado. O array resultante pode ser reindexado usando a função array_values().

### Parâmetros

`array`

  O array a ser iterado

`callback`

  A função callback a ser usada

  Se nenhum `callback` é fornecido, todas entradas vazias do `array` serão removidas. Veja empty() para saber como o PHP define vazia nesse caso.

`mode`

  Flag determinando quais argumentos são passados para `callback`:

  - `ARRAY_FILTER_USE_KEY` - passa chaves como argumentos para `callback` em vez de valor
  - `ARRAY_FILTER_USE_BOTH` - passa tanto valor quanto chave como argumento para `callback` em vez do valor
  Padrão é `0` que em vez disso irá passar valor como o único argumento para `callback`.

### Valor Retornado

Retorna o array filtrado.

### Registro de Alterações

Versão | Descrição
--- | ---
8.0.0 | `callback` agora é anulável.
8.0.0 | Se a função `callback` espera que um parâmetro seja passado por referência, esta função agora emitirá um `E_WARNING`.

### Exemplos

Exemplo #1 Exemplo da função array_filter()

    <?php
    function impar($var)
    {
        // retorna se o inteiro informado é impar
        return $var & 1;
    }

    function par($var)
    {
        // retorna se o inteiro informado é par
        return !($var & 1);
    }

    $array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];
    $array2 = [6, 7, 8, 9, 10, 11, 12];

    echo "Ímpares: \n";
    print_r(array_filter($array1, "impar"));
    echo "Pares: \n";
    print_r(array_filter($array2, "par"));
    ?>

O exemplo acima produzirá:

    Ímpares:
    Array
    (
        [a] => 1
        [c] => 3
        [e] => 5
    )
    Pares:
    Array
    (
        [0] => 6
        [2] => 8
        [4] => 10
        [6] => 12
    )

Exemplo #2 array_filter() sem `callback`

    <?php

    $entry = [
        0 => 'foo',
        1 => false,
        2 => -1,
        3 => null,
        4 => '',
        5 => '0',
        6 => 0,
    ];

    print_r(array_filter($entry));
    ?>

O exemplo acima produzirá:

    Array
    (
        [0] => foo
        [2] => -1
    )

Exemplo #3 array_filter() com `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));
    ?>

O exemplo acima produzirá:

    array(1) {
      ["b"]=>
      int(2)
    }
    array(2) {
      ["b"]=>
      int(2)
      ["d"]=>
      int(4)
    }

### Notas

Cuidado

Se o array for modificado por uma função de retorno (ex.: elemento adicionado ou indefinido), o comportamento desta função é indefinido.

### Veja Também

- array_intersect() - Calcula a interseção entre arrays
- array_find() - Retorna um primeiro elemento que satisfaz uma função de retorno
- array_any() - Verifica se pelo menos um elemento de um array satisfaz uma função de retorno
- array_map() - Aplica uma função em todos os elementos dos arrays dados
- array_reduce() - Reduz um array para um único valor através de um processo iterativo via callback

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