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.
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.
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.
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.
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.
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.