Eigenartiges Verhalten im Array mit WAHRHEIT
Die in_array()-Funktion von PHP zeigt ein unerwartetes Verhalten, wenn mit einem Array gearbeitet wird, das den booleschen Wert TRUE enthält.
Betrachten wir Folgendes array:
$arr = [TRUE, "some string", "something else"];
Überraschenderweise gibt in_array("test", $arr) true zurück, obwohl „test“ nicht im Array enthalten ist. Das gleiche ungewöhnliche Ergebnis ergibt sich mit array_search("test", $arr), das 0 zurückgibt.
Dieses Verhalten ist kein Fehler, sondern eine gut dokumentierte Funktion.
Genau genommen Apropos: Den dritten Parameter verstehen
Sowohl in_array() als auch array_search() verfügen über einen optionalen dritten Parameter, $strict, der Der Standardwert ist FALSE.
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ])
Dies bedeutet, dass beide Funktionen standardmäßig einen losen Vergleich (==) verwenden. Sie bewerten Werte ausschließlich nach Gleichheit und ignorieren ihre Typen. Folglich gibt TRUE == „jede nicht leere Zeichenfolge“ im gegebenen Beispiel aufgrund von Typjonglage „true“ zurück.
Strenge erzwingen: $strict auf TRUE setzen
Um genaue Vergleiche sicherzustellen, können Sie $strict auf TRUE setzen. Dadurch wird PHP gezwungen, einen strikten Vergleich (===) zu verwenden und sowohl den Wert als auch den Typ der verglichenen Werte zu überprüfen.
$result = in_array("test", $arr, TRUE); var_dump($result); // Output: bool(false)
In diesem Fall gibt in_array() wie erwartet korrekt false zurück.
Denken Sie daran, dass das Verständnis der Nuancen des Typ-Jonglierens und der Rolle von $strict bei der Verwendung von in_array() und array_search() von entscheidender Bedeutung ist. Diese Funktionen bieten leistungsstarke Suchfunktionen, ihr Verhalten kann jedoch unvorhersehbar sein, wenn diese Feinheiten übersehen werden.
Das obige ist der detaillierte Inhalt vonWarum gibt „in_array()' „True' für einen nicht vorhandenen Wert in PHP zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!