array_filter
(PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
array_filter — Filtert Elemente eines Arrays mittels einer Callback-Funktion
Beschreibung
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 ausarray
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 ancallback
gesendet. -
ARRAY_FILTER_USE_BOTH
- statt nur des Wertes werden sowohl der Schlüssel als auch der Wert als Parameter ancallback
übergeben.
0
, was bedeutet, dass nur der Wert als Parameter ancallback
ü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
Wird das Array durch die Callbackfunktion verändert (z. B. durch Hinzufügen, Löschen oder Zurücksetzen eines Elements), so ist das Verhalten dieser Funktion undefiniert.
Siehe auch
- array_intersect() - Ermittelt die Schnittmenge von Arrays
- 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
- array_walk() - Wendet eine vom Benutzer gelieferte Funktion auf jedes Element eines Arrays an