Filtert Elemente eines Arrays mittels einer Callback-Funktion

# array_filter

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

array_filter — Filtert Elemente eines Arrays mittels einer Callback-Funktion

### Beschreibung

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

Iteriert über jeden Wert im Array `array` und übergibt diesen der Callbackfunktion `callback`. Gibt die Funktion `callback` `true` zurück, so wird der aktuelle Wert von `array` in das Ergebnis-Array geschrieben.

Die Schlüssel bleiben erhalten, was zu Lücken führen kann, wenn `array` indexiert war. Das resultierende Array kann unter Verwendung der Funktion array_values() reindexiert werden.

### Parameter-Liste

`array`

  Das Array, über das iteriert werden soll

`callback`

  Die zu verwendende Callbackfunktion

  Falls die Funktion `callback` nicht angegeben wurde, werden alle leeren Einträge aus `array` entfernt. Siehe empty() zu Informationen was leer in diesem Fall bedeutet.

`mode`

  Flag, welches bestimmt welche Parameter an `callback` gesendet werden:

  - `ARRAY_FILTER_USE_KEY` - statt des Wertes wird der Schlüssel als einziger Parameter an `callback` gesendet.
  - `ARRAY_FILTER_USE_BOTH` - statt nur des Wertes werden sowohl der Schlüssel als auch der Wert als Parameter an `callback` übergeben.
  Der Standardwert ist `0`, was bedeutet, dass nur der Wert als Parameter an `callback` übergeben wird.

### Rückgabewerte

Gibt das gefilterte Array zurück.

### Changelog

Version | Beschreibung
--- | ---
8.0.0 | `callback` ist jetzt nullbar.
8.0.0 | Wenn `callback` einen per Referenz übergebenen Parameter erwartet, gibt diese Funktion nun einen Fehler der Stufe `E_WARNING` aus.

### Beispiele

Beispiel #1 array_filter()-Beispiel

    <?php
    function ungerade($var)
    {
        // Gibt zurück, ob der Eingabewert ungerade ist
        return $var & 1;
    }

    function gerade($var)
    {
        // Gibt zurück, ob der Eingabewert gerade ist
        return !($var & 1);
    }

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

    echo "Ungerade :\n";
    print_r(array_filter($array1, "ungerade"));
    echo "Gerade:\n";
    print_r(array_filter($array2, "gerade"));
    ?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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

Beispiel #2 array_filter() ohne `callback`

    <?php

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

    print_r(array_filter($entry));
    ?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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

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

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

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

### Anmerkungen

Achtung

Wird das Array durch die Callbackfunktion verändert (z. B. durch Hinzufügen oder Zurücksetzen eines Elements), so ist das Verhalten dieser Funktion undefiniert.

### Siehe auch

- array_intersect() - Ermittelt die Schnittmenge von Arrays
- array_find() - Gibt das erste Element zurück, das eine Callback-Funktion erfüllt
- array_any() - Prüft, ob mindestens ein Element eines Arrays eine Callback-Funktion erfüllt
- array_map() - Wendet eine Callback-Funktion auf die Elemente von Arrays an
- array_reduce() - Reduziert das Array mittels einer Callback-Funktion iterativ auf einen einzigen Wert

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