Aktueller Standort: Startseite> Neueste Artikel> Wann sollte Array_filter () vermieden werden?

Wann sollte Array_filter () vermieden werden?

M66 2025-06-03

In PHP ist Array_filter () eine sehr praktische Funktion, die "leere" Werte aus einem Array entfernen kann, oder die Rückruffunktionen verwenden, um eine komplexe Filterung durchzuführen. Es ist jedoch nicht die beste Wahl in allen Szenarien. In einigen Fällen kann die Verwendung von Array_filter () Leistungsprobleme, verwirrende Codelogik und sogar Fehler in den Ergebnissen verursachen. Lassen Sie uns unter den Umständen diskutieren, unter welchen Umständen wir nicht mit Array_filter () verwenden sollten.

1. Wenn Sie sich um die Schlüssel des Arrays kümmern

Array_Filter () behält standardmäßig die Schlüsselnamen des ursprünglichen Arrays bei, wird jedoch nicht wieder integriert. Wenn Sie ein Indexarray erwarten, das kontinuierlich von 0 inkrementiert wird, kann Sie mit Array_filter () enttäuschen. Zum Beispiel:

 $data = [0 => 'A', 1 => '', 2 => 'B'];
$result = array_filter($data);

print_r($result);

Die Ausgabe ist:

 Array
(
    [0] => A
    [2] => B
)

Wenn Sie versuchen, es zu diesem Zeitpunkt mit JSON_Encode an das vordere Ende zu übergeben oder mit Indizes auf Elemente zuzugreifen, kann dies zu Problemen führen. Zu diesem Zeitpunkt sollten Sie Array_Values ​​(Array_Filter (...)) verwenden oder in Betracht ziehen, es selbst zu verwenden.

2. Wenn Sie den Wert falsch halten müssen

Array_Filter () entfernen alle "falschen Werte" standardmäßig (false, 0, null, '', [] usw.), die die Datenintegrität in einigen Szenarien zerstören. Zum Beispiel:

 $data = [0, 1, 2, false];
$result = array_filter($data);
print_r($result);

Die Ausgabe ist:

 Array
(
    [1] => 1
    [2] => 2
)

Sowohl False als auch 0 werden entfernt, aber wenn diese Werte für Sie beispielsweise die Stimme des Benutzers zählen (0 bedeutet Einwand), wird dies inakzeptabel.

Die Lösung besteht darin, eine benutzerdefinierte Rückruffunktion zu übergeben:

 $result = array_filter($data, function($val) {
    return $val !== null;
});

Wenn Sie nur Null entfernen möchten, verlassen Sie sich nicht auf das Standardverhalten.

3. Wenn die Leistung zu einem Schlüsselfaktor wird

Obwohl Array_Filter () eine Komfortfunktion ist, wird sie durch Überqueren des gesamten Arrays implementiert, was die Leistung beeinflussen kann, wenn Sie häufig in einem großen Datensatz oder in einem hohen Parallelitätsszenario aufrufen. Beispielsweise wird die wiederholte Verwendung von Array_filter () in einem Array mit Millionen von Datensätzen erhebliche Leistungsaufwand verursachen.

Zu diesem Zeitpunkt sollten Sie überlegen, ob Sie es wirklich verwenden müssen oder ob es in andere Verarbeitungsprozesse zusammengefasst werden kann, z.

4. In Kettenoperationen kann Verwirrung auftreten

PHP ist keine Datenverarbeitungssprache, die Kettenaufrufe auf natürliche Weise unterstützt (im Gegensatz zu JavaScripts MAP/Filter/Reduzierung ). Die Verwendung von Array_Filter () in Kettenaufrufen kann daher leicht logische Verwirrung verursachen. Zum Beispiel: