Heim >Backend-Entwicklung >PHP-Tutorial >Warum geben PHPs „in_array()' und „array_search()' manchmal unerwartete Ergebnisse zurück?
PHPs in_array() und array_search()-Funktionen: Beheben von seltsamem Verhalten
Die PHP-Funktionen in_array() und array_search() weisen ein eigenartiges Verhalten auf wenn es verwendet wird, um in einem Array nach Werten zu suchen. Dieses rätselhafte Problem tritt auf, wenn das Array Elemente unterschiedlichen Typs enthält.
Beispiel:
$arr = [TRUE, "some string", "something else"]; $result = in_array("test", $arr); var_dump($result); // Output: bool(true) $result = array_search("test", $arr); var_dump($result); // Output: int(0)
Überraschend, nicht wahr? Beide Funktionen geben true zurück, was darauf hinweist, dass sich „test“ im Array befindet, auch wenn dies eindeutig nicht der Fall ist. Dieses Verhalten ist auf den von diesen Funktionen verwendeten Standardvergleichsmechanismus zurückzuführen.
Strenger vs. loser Vergleich:
Standardmäßig verwenden in_array() und array_search() einen losen Vergleich (==), der „true“ auswertet, auch wenn die Typen der verglichenen Werte unterschiedlich sind. In unserem Beispiel wird das TRUE-Element im Array automatisch in eine Zeichenfolge umgewandelt, was dazu führt, dass TRUE == „test“ als „true“ ausgewertet wird.
Lösung: Strengen Vergleich erzwingen
Um dieses unerwartete Verhalten zu verhindern, ist es notwendig, einen strikten Vergleich (===) anzugeben, indem der optionale dritte Parameter dieser Funktionen auf true gesetzt wird. Dies zwingt die Funktionen, beim Vergleich sowohl den Wert als auch den Typ der Elemente zu überprüfen, um ein genaueres Ergebnis zu gewährleisten.
$result = in_array("test", $arr, true); var_dump($result); // Output: bool(false) $result = array_search("test", $arr, true); var_dump($result); // Output: int(-1)
In diesem überarbeiteten Beispiel werden die korrekten Ergebnisse erhalten, wie es den Funktionen vorgegeben ist Verwenden Sie einen strengen Vergleich. „test“ wurde im Array nicht gefunden und die zurückgegebenen Werte spiegeln dies wider.
Das obige ist der detaillierte Inhalt vonWarum geben PHPs „in_array()' und „array_search()' manchmal unerwartete Ergebnisse zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!