Aktueller Standort: Startseite> Neueste Artikel> Ignorieren Sie leere Saiten, 0 und Null werden alle als "falsche Werte" behandelt.

Ignorieren Sie leere Saiten, 0 und Null werden alle als "falsche Werte" behandelt.

M66 2025-06-05

In PHP ist Array_filter eine sehr praktische Funktion, um Arrays basierend auf dem Rückgabeergebnis der Rückruffunktion zu filtern. Wenn die Rückruffunktion nicht bereitgestellt wird, entfernt Array_filter alle als "falsy -Werte" betrachteten Elemente. Diese "falschen Werte" umfassen:

  • FALSCH

  • NULL

  • 0 (Ganzzahl)

  • '0' (String)

  • '' (leere Zeichenfolge)

  • [] (Leeres Array)

Dies kann einige Entwickler verwirren, insbesondere wenn sie ursprünglich Null- oder leere Saiten entfernen wollten, stellten sie fest, dass selbst die Ganzzahl 0 zusammen gelöscht wurde. Warum passiert das? Lassen Sie uns einen tieferen Blick darauf werfen.

Das Konzept des "falschen Wertes" in PHP

PHP ist eine schwache Sprache, was bedeutet, dass bei der Durchführung eines booleschen Vorgangs bestimmte Typen automatisch in boolesche Werte umgewandelt werden. Dieser Mechanismus wird als Typ Jonglieren bezeichnet. In einem booleschen Kontext werden die folgenden Werte als falsch interpretiert:

 var_dump((bool) false);   // false
var_dump((bool) null);    // false
var_dump((bool) 0);       // false
var_dump((bool) '0');     // false
var_dump((bool) '');      // false
var_dump((bool) []);      // false

Solange ein Wert in einen Booleschen Typ und false umgewandelt wird, filtert Array_filter ihn standardmäßig.

Das Standardverhalten von Array_filter

Der Prototyp von Array_Filter -Funktion lautet wie folgt:

 array_filter(array $array, ?callable $callback = null, int $mode = 0): array

Wenn der zweite Parameter $ $ callback null ist, funktioniert Array_filter tatsächlich wie folgt:

 $result = [];
foreach ($array as $key => $value) {
    if ((bool) $value) {
        $result[$key] = $value;
    }
}

Zum Beispiel:

 $data = [0, 1, 2, null, '', 'hello', false];

$result = array_filter($data);

// sich herausstellen [1 => 1, 2 => 2, 5 => 'hello']

Wie Sie sehen können, gelten 0 , Null , '' und False alle als "falsch" und werden daher entfernt.

Wie kann ich Werte eines bestimmten Typs herausfiltern?

Wenn Sie nur Nullwerte herausfiltern und 0 und leere Zeichenfolgen aufbewahren möchten, können Sie beispielsweise eine benutzerdefinierte Rückruffunktion übergeben:

 $data = [0, '0', '', null, false, 'PHP'];

$result = array_filter($data, function ($item) {
    return !is_null($item);
});

// Behalte es 0、'0' Und ''

Zum Beispiel, wenn Sie nur leere Zeichenfolgen entfernen möchten:

 $result = array_filter($data, function ($item) {
    return $item !== '';
});

Auf diese Weise können Sie sorgfältig steuern, welche Werte gemäß den bestimmten Bedürfnissen beibehalten werden müssen.

Ein Beispiel für ein praktisches Szenario

Angenommen, Sie erstellen ein Formular-Einreichungssystem, und das Front-End-Formular kann einige leere Felder zurückgeben, und Sie möchten nur das behalten, was der Benutzer tatsächlich ausgibt:

 $formData = [
    'name' => 'Alice',
    'email' => '',
    'age' => 0,
    'website' => null,
];

$filtered = array_filter($formData, function ($value) {
    return $value !== '' && !is_null($value);
});

print_r($filtered);

Ausgangsergebnis:

 Array
(
    [name] => Alice
    [age] => 0
)

In diesem Ergebnis werden die leeren Zeichenfolge und Null entfernt, während 0 beibehalten wird, da der Benutzer möglicherweise das Alter von 0 in der Lage ist.

Zusammenfassung

Bei der Verwendung von Array_filter ist es wichtig, das Konzept der "falschen Werte" in PHP zu verstehen. Standardmäßig entfernt es alle Werte, die dem booleschen false entsprechen, nicht nur Null oder leere Zeichenfolgen. Wenn Sie ein genaueres Filterverhalten benötigen, wird empfohlen, immer eine benutzerdefinierte Rückruffunktion zu übergeben.

Auf diese Weise können Sie vermeiden, gültige Daten versehentlich zu löschen, z. B. den Wert "0", den der Benutzer ausfüllt, und Sie können auch flexibel mit verschiedenen Geschäftsszenarien umgehen.