5 Stimmen

php Problem: strpos Funktion funktioniert nicht

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?

8voto

KingCrunch Punkte 124545

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";

3voto

Ozair Kafray Punkte 13142

Dies geschieht, weil der Suchstring an Position 0 gefunden wird. Versuchen Sie

if(strpos($string,$search) !== FALSE)

anstelle von

if(strpos($string,$search))

2voto

Ryan Punkte 24754

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.

siehe: http://php.net/manual/en/function.strpos.php

2voto

Kalessin Punkte 2252

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";
}

1voto

David Lin Punkte 631

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.com

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.

Powered by:

X