Aktueller Standort: Startseite> Neueste Artikel> Bei Verwendung von Array_Filter () wird bei Verwendung von Array_filter ignoriert

Bei Verwendung von Array_Filter () wird bei Verwendung von Array_filter ignoriert

M66 2025-05-17

In PHP ist die Funktion array_filter () ein allgemeines Array -Verarbeitungstool, mit dem Elemente in einem Array gefiltert werden. Die Funktion array_filter () akzeptiert eine Rückruffunktion und ein Array als Parameter und gibt ein neues Array zurück, das alle Elemente enthält, die den Callback -Funktionsbedingungen erfüllen.

Standardmäßig behält Array_filter () den Schlüsselnamen (Index) des gefilterten Arrays bei. Viele Entwickler können jedoch feststellen, dass die Schlüsselnamen nicht beibehalten werden oder einige unerwartete Situationen bei der Verwendung auftreten können. Warum tritt dieses Phänomen auf?

1. Das Verhalten von Array_filter ()

Die grundlegende Funktion von Array_filter () besteht darin, zu bestimmen, welche Elemente basierend auf dem Rückgabewert der Rückruffunktion beibehalten werden. Das Element, das True zurückgibt, wird beibehalten, während das Element, das False zurückgibt, entfernt wird. Seine Syntax ist wie folgt:

 array_filter(array $array, callable $callback = null, int $mode = 0): array
  • $ Array : Das zu filterne Array.

  • $ Rückruf : Eine Rückruffunktion für die Filterung. Wenn es ausgelassen wird, werden alle Werte, die nicht leer sind, standardmäßig beibehalten.

  • $ modus : Ein optionaler Parameter, der die Indizierungsmethode des Array steuern kann, normalerweise Array_filter_use_key oder array_filter_use_both .

2. Standardmäßig behält Array_Filter () den Schlüsselnamen bei

Wenn wir Array_Filter () aufrufen, behält es den ursprünglichen Schlüsselnamen des Array -Elements bei. Betrachten Sie beispielsweise das folgende Beispiel:

 $input = [0 => 'apple', 1 => 'orange', 2 => 'banana'];
$result = array_filter($input, function($value) {
    return strlen($value) > 5;
});

print_r($result);

Die Ausgabe wird sein:

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

Wie Sie sehen können, bleiben die ursprünglichen Schlüsselnamen (1 und 2) erhalten.

3. Der Fall, in dem Array_Filter () Schlüsselnamen ignoriert

Wenn Sie jedoch feststellen, dass Array_Filter () den Schlüsselnamen nicht beibehält, liegt dies normalerweise daran, dass der Modus Array_filter_USE_KEY oder Array_Filter_USE_BOTH beim Aufrufen verwendet wird, oder die Rückruffunktion gibt einen anderen Wert zurück.

Schauen wir uns dieses Beispiel an:

 $input = [0 => 'apple', 1 => 'orange', 2 => 'banana'];
$result = array_filter($input, function($key) {
    return $key > 0;
}, ARRAY_FILTER_USE_KEY);

print_r($result);

Dieser Code wird ausgegeben:

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

Obwohl wir hier das Muster array_filter_use_key verwenden, bleiben die Schlüsselnamen weiterhin erhalten, da wir die Schlüsselwerte und nicht die Werte des tatsächlichen Elements filtern.

4. Warum ignoriert Array_filter () die Aufbewahrung von Schlüsselnamen?

Array_Filter () filtert nur standardmäßig die Werte des Arrays, ohne die Schlüssel des Arrays zu ändern. Wenn Sie array_filter_use_key oder array_filter_use_both verwenden, kann der Schlüsselname neu berechnet oder zurückgesetzt werden. Dies ist auf die interne Verarbeitungslogik von PHP zurückzuführen, insbesondere wenn verschiedene Filtermodi verwendet werden, kann der Rückgabewert die Aufbewahrung von Schlüsselnamen beeinflussen.

5. Lösung: den Index wieder aufbauen

Wenn Sie möchten, dass das gefilterte Array aufeinanderfolgende Schlüsselnamen regeneriert, können Sie Array_Values ​​() verwenden, um den Index wieder aufzubauen:

 $input = [0 => 'apple', 1 => 'orange', 2 => 'banana'];
$result = array_filter($input, function($value) {
    return strlen($value) > 5;
});
$result = array_values($result);

print_r($result);

Ausgabe:

 Array
(
    [0] => orange
    [1] => banana
)

Wie Sie sehen können, werden nach Verwendung von Array_Values ​​() die Array -Tasten neu integriert, was zu aufeinanderfolgenden Schlüsselnamen ab 0 führt.

6. Zusammenfassung

Array_Filter () behält standardmäßig die Schlüsselnamen bei, aber in bestimmten Modi können Schlüsselnamen auftreten, insbesondere bei der Verwendung von Array_filter_use_key oder array_filter_use_both . Wenn Sie den Schlüsselnamen zurücksetzen müssen, können Sie ihn durch Array_Values ​​() lösen.

Ich hoffe, dieser Artikel ist hilfreich für Ihr Verständnis von Array_filter () von Array_Filter () !