In der Array -Verarbeitungsfunktion von PHP ist Array_Filter () ein sehr praktisches Instrument, und es ist sein Ziel, "die Kriterien nicht zu erfüllen" Elemente aus dem Array entfernen. Es hat jedoch ein Verhalten, das Anfänger verwirren kann:
Dann lautet die Frage:
Wenn Sie die Rückruffunktion nicht übergeben, wenn Sie Array_filter () verwenden, denken Sie fälschlicherweise, dass sie keinen Einfluss auf das Ergebnis hat?
Lassen Sie uns gemeinsam eingehend analysieren.
Array_Filter (Array $ Array,? Callable $ callback = null, int $ modus = 0): Der zweite Parameter von Array $ $ Callback ist optional.
Wenn Sie keine Rückruffunktion angeben , verwendet Array_filter () standardmäßig Boolval (), um festzustellen, ob jedes Element "wahr" ist, und zu entscheiden, ob sie basierend darauf beibehalten sollen. Das heißt, es entfernt alle "falschen" Elemente wie:
FALSCH
0 (Ganzzahl oder String)
NULL
Leere Zeichenfolge "" "
Leeres Array []
$data = [0, 1, false, 2, '', 3, null];
$result = array_filter($data);
print_r($result);
Das Ausgangsergebnis ist:
Array
(
[1] => 1
[3] => 2
[5] => 3
)
Sie werden feststellen, dass 0 , falsch , '' und Null alle herausgefiltert werden.
Viele Anfänger werden denken:
"Wenn ich die Rückruffunktion nicht übergebenin, ist es gleichbedeutend mit nichts, wenn ich nur das ursprüngliche Array zurückgibt."
Aber natürlich ist dies ein Missverständnis. Tatsächlich trägt das Standardverhalten selbst die Filterlogik und basiert auf "booleschen Wahrheit".
Wenn Sie nur den Nullwert herausfiltern und 0 , falsche , leere Zeichenfolgen usw. aufbewahren möchten, können Sie eine Callback -Funktion explizit übergeben:
$data = [0, 1, false, 2, '', 3, null];
$result = array_filter($data, function($item) {
return $item !== null;
});
print_r($result);
Ausgangsergebnis:
Array
(
[0] => 0
[1] => 1
[2] =>
[3] => 2
[4] =>
[5] => 3
)
Zu diesem Zeitpunkt wird nur Null gefiltert und andere "falsche Werte" bleiben noch beibehalten.
Ohne eine Rückruffunktion zu übergeben, ist Array_filter () nicht "nicht verarbeitet", sondern standardmäßig alle "falschen Werte" im booleschen Sinne herauszufiltern. Dies ist nützlich, wenn Sie Daten reinigen, kann jedoch leicht zu Missverständnissen führen.
Um logische Verwirrung zu vermeiden, empfehlen wir Ihnen:
Identifizieren Sie den spezifischen Inhalt, den Sie filtern möchten.
Wenn es eine benutzerdefinierte Logikanforderung gibt, übergeben Sie die Rückruffunktion immer explizit.
Achten Sie darauf, den Schlüsselnamen zu behalten (der Schlüsselname des ursprünglichen Arrays wird standardmäßig beibehalten).
Sie können die folgende Seite besuchen, um weitere Beispiele für diese Funktion in der tatsächlichen Anwendung anzuzeigen (der Name des Beispieladressendomänennamens wurde durch m66.net ersetzt):