Heim > Backend-Entwicklung > PHP-Tutorial > Warum geben PHPs „in_array()' und „array_search()' manchmal unerwartete Ergebnisse zurück?

Warum geben PHPs „in_array()' und „array_search()' manchmal unerwartete Ergebnisse zurück?

Patricia Arquette
Freigeben: 2024-12-24 01:27:11
Original
1023 Leute haben es durchsucht

Why Do PHP's `in_array()` and `array_search()` Sometimes Return Unexpected Results?

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)
Nach dem Login kopieren

Ü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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage