array_filter

Filters elements of an array using a callback function

&reftitle.description; `array` `array_filter` `array` `array` ``callable``null```callback`&null; `int` `mode` 0

Iterates over each value in the `array` passing them to the `callback` function. If the `callback` function returns &true;, the current value from `array` is returned into the result &array;.

Array keys are preserved, and may result in gaps if the `array` was indexed. The result &array; can be reindexed using the `array_values` function.

&reftitle.parameters;

`array`

- The array to iterate over

`callback`

- The callback function to use

  If no `callback` is supplied, all empty entries of `array` will be removed. See `empty` for how PHP defines empty in this case.

`mode`

- Flag determining what arguments are sent to `callback`:

  - `ARRAY_FILTER_USE_KEY` - pass key as the only argument to `callback` instead of the value

  - `ARRAY_FILTER_USE_BOTH` - pass both value and key as arguments to `callback` instead of the value

  Default is `0` which will pass value as the only argument to `callback` instead.
&reftitle.returnvalues;

Returns the filtered array.

&reftitle.changelog;

&Version; | &Description;
8.0.0 | `callback` is nullable now.
&array.changelog.by-ref;

&reftitle.examples;

### `array_filter` example

    <?php
    function odd($var)
    {
        // returns whether the input integer is odd
        return $var & 1;
    }

    function even($var)
    {
        // returns whether the input integer is even
        return !($var & 1);
    }

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

    echo "Odd :\n";
    print_r(array_filter($array1, "odd"));
    echo "Even:\n";
    print_r(array_filter($array2, "even"));
    ?>

&example.outputs;

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

### `array_filter` without `callback`

    <?php

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

    print_r(array_filter($entry));
    ?>

&example.outputs;

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

### `array_filter` with `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));
    ?>

&example.outputs;

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

&reftitle.notes;

If the array is changed from the callback function (e.g. element added or unset) the behavior of this function is undefined.

&reftitle.seealso;

- `array_intersect`
- `array_find`
- `array_any`
- `array_map`
- `array_reduce`