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
Patricia ArquetteOriginal
2024-12-24 01:27:11960Durchsuche

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)

Ü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!

Stellungnahme:
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