Warum funktioniert der folgende php-Code nicht:
$string = "123";
$search = "123";
if(strpos($string,$search))
{
echo "found";
}else{
echo "not found";
}
da $search in $string ist - sollte es nicht als found ausgelöst werden?
Warum funktioniert der folgende php-Code nicht:
$string = "123";
$search = "123";
if(strpos($string,$search))
{
echo "found";
}else{
echo "not found";
}
da $search in $string ist - sollte es nicht als found ausgelöst werden?
Dies wird erwähnt in der Handbuch: strpos()
Diese Funktion kann den booleschen Wert FALSE zurückgeben, aber auch einen nicht-booleschen Wert, der zu FALSE ausgewertet wird, wie z. B. 0 oder "". Bitte lesen Sie den Abschnitt über Boolesche Werte für weitere Informationen. Verwenden Sie den Operator ===, um den Rückgabewert dieser Funktion zu testen.
In Ihrem Fall befindet sich die Zeichenkette am Index 0
und in php 0 == false
Die Lösung besteht darin, einfach den strengen Komparator zu verwenden
echo strpos($string,$search) === false
? "not found"
: "found";
Eine weitere
echo is_int(strpos($string,$search))
? "found"
: "not found";
Oder etwas ... sagen wir mal Interessantes :D Nur zur Veranschaulichung. Ich empfehle das hier nicht.
echo strpos('_' . $string,$search) // we just shift the string 1 to the right
? "found"
: "not found";
strpos
gibt den ersten Offset zurück, bei dem $search
wurde gefunden - 0
. 0
wird wiederum ausgewertet zu false
. Daher scheitert das if.
Si $search
wurde nicht gefunden, strpos
gibt zurück. FALSE
. Prüfen Sie zunächst den Rückgabewert für !== FALSE
und prüfen Sie dann den Versatz.
Vielen Dank an alle, die in den Kommentaren darauf hingewiesen haben.
Von das Handbuch :
Diese Funktion kann FALSE, kann aber auch einen nicht booleschen Wert zurückgeben, der zu FALSE auswertet, wie z.B. 0 oder "". Bitte lesen Sie den Abschnitt über Boolesche Werte f Informationen. verwenden der ===-Operator zum Testen des Rückgabewerts dieser Funktion.
In Ihrem Beispiel sollten Sie Folgendes verwenden
$string = "123";
$search = "123";
if ( false !== strpos( $string, $search ) ) {
echo "found";
} else {
echo "not found";
}
Strpos gibt die numerische Position der zu suchenden Zeichenkette zurück, wenn sie gefunden wird. In Ihrem Fall sollten Sie also stattdessen dies tun:
$search = "123";
$string = "123";
if (strpos($string,$search)===false) { echo "not found"; }
else { echo "found"; }
Grundsätzlich wird ein false zurückgegeben, wenn der String nicht gefunden wird.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.