Aktueller Standort: Startseite> Neueste Artikel> Was soll ich tun, wenn Array_filter () nicht wie erwartet filtert?

Was soll ich tun, wenn Array_filter () nicht wie erwartet filtert?

M66 2025-06-05

In PHP wird die Funktion array_filter () verwendet, um Array -Elemente durch eine Rückruffunktion zu filtern. Wenn Sie diese Funktion verwenden, wird sie über das Array iteriert und entscheiden, ob das Element basierend auf dem Rückgabewert der Rückruffunktion beibehalten soll. Wenn die Rückruffunktion true zurückgibt, wird das Element beibehalten. Wenn falsch , wird das Element herausgefiltert.
Manchmal scheint Array_Filter () nicht zu funktionieren, was das Ergebnis nicht mit den Erwartungen widerspricht. Als nächstes werden wir einige häufige Probleme und Lösungen diskutieren.

1. Der Rückgabewert der Rückruffunktion entspricht nicht den Erwartungen

Die von array_filter () verwendete Rückruffunktion sollte einen booleschen Wert zurückgeben. Wenn die Rückruffunktion null- , falsche oder andere falsche Werte zurückgibt, werden die Elemente herausgefiltert. Wenn True zurückgegeben wird, bleibt das Element erhalten. Wenn Sie feststellen , dass Array_filter () nicht wie erwartet funktioniert, ist es sehr wichtig, den Rückgabewert der Rückruffunktion zu überprüfen.

Beispielfrage:

 $arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, function($value) {
    if ($value % 2 == 0) {
        return 1;  // Es sollte hier zurückgegeben werden true,Stattdessen 1
    }
    return false;
});
print_r($result);

Problemumgehung: Stellen Sie sicher, dass die Rückruffunktion einen booleschen Wert true oder falsch zurückgibt, nicht einen anderen Wert.

Korrigierter Code:

 $arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, function($value) {
    return $value % 2 == 0;  // Einen booleschen Wert zurückgeben true oder false
});
print_r($result);

2. Der Parametertyp der Rückruffunktion ist falsch

Wenn der erwartete Parameter -Typ der Rückruffunktion nicht mit dem Typ des tatsächlich übergebenen Array -Elements übereinstimmt, kann dies dazu führen, dass die Elemente nicht korrekt filtriert werden. Wenn die Rückruffunktion beispielsweise erwartet, dass sie ganzzahlige Werte empfangen, wird tatsächlich eine Zeichenfolge oder andere Datentypen übergeben.

Beispielfrage:

 $arr = ["1", "2", "3", "4", "5"];
$result = array_filter($arr, function($value) {
    return $value % 2 == 0;  // Hier $value Es ist eine Zeichenfolge,Unerwartete Ergebnisse verursachen
});
print_r($result);

Lösung: Verwenden Sie Casting oder stellen Sie sicher, dass der Elementtyp des Arrays den Anforderungen der Rückruffunktion entspricht.

Korrigierter Code:

 $arr = ["1", "2", "3", "4", "5"];
$result = array_filter($arr, function($value) {
    return (int)$value % 2 == 0;  // Ganzzahl gegossen
});
print_r($result);

3.. Verarbeitung leerer Arrays oder leeren Werte

Array_Filter () filtert standardmäßig alle falschen Werte im Array (z. B. NULL , FALSE , LELTER Saiten usw.). Wenn es im Array Nullwerte gibt, kann das Filterergebnis schlechter als erwartet sein.

Beispielfrage:

 $arr = [0, 1, 2, null, false, "", 3];
$result = array_filter($arr);
print_r($result);  // Es wird hier draußen gefiltert 0、null、false und leere Saiten

Lösung: Wenn Sie Werte wie 0 oder False aufbewahren möchten, können Sie eine benutzerdefinierte Rückruffunktion übergeben oder das Flag array_filter_use_both verwenden, um zu steuern, wie man filtert.

Code für benutzerdefinierte Rückruffunktion:

 $arr = [0, 1, 2, null, false, "", 3];
$result = array_filter($arr, function($value) {
    return $value !== null;  // reservieren null Andere Werte als
});
print_r($result);

4. Ändern Sie die Referenz des Arrays

Array_Filter () gibt ein neues Array zurück, anstatt das ursprüngliche Array zu ändern. Das Ändern des ursprünglichen Arrays erfordert Referenzübergeben oder andere Methoden. Wenn Sie das ursprüngliche Array direkt manipulieren möchten, können Sie Array_walk () oder andere Funktionen verwenden.

Beispielfrage:

 $arr = [1, 2, 3, 4, 5];
array_filter($arr, function($value) {
    return $value > 3;
});
print_r($arr);  // Das ursprüngliche Array wurde nicht modifiziert

Lösung: Wenn Sie das ursprüngliche Array ändern möchten, können Sie Array_WALK () verwenden oder den Wert direkt neu zuweisen.

Korrigierter Code:

 $arr = [1, 2, 3, 4, 5];
$arr = array_filter($arr, function($value) {
    return $value > 3;
});
print_r($arr);  // Geben Sie das geänderte Array direkt zurück

5. Missbrauchsarray_filter () Parameter

Array_filter () ermöglicht es dem zweiten Parameter, die Filterkriterien anzugeben. Standardmäßig wird eine Rückruffunktion verwendet, um Elemente zu filtern. Wenn dieser Parameter jedoch missbraucht wird, kann dies auch zu Problemen führen.

Beispielfrage:

 $arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, 1);  // Verwendete den numerischen Wert falsch 1
print_r($result);

Lösung: Stellen Sie sicher, dass der zweite Parameter eine gültige Rückruffunktion ist.

Korrigierter Code:

 $arr = [1, 2, 3, 4, 5];
$result = array_filter($arr, function($value) {
    return $value % 2 == 0;  // Verwenden Sie Rückruffunktionen richtig
});
print_r($result);