Homepage-Webhilfe Event-Banner

Warum gibt strpos false zurück

pianist87
Benutzer
Registriert seit:
  » 27.07.2021 19:03:46
Letzter Besuch:
  » 27.07.2021 19:03:59

Warum gibt strpos false zurück

#1
zuletzt editiert von pianist87 am 27.07.2021 19:09:50

Hallo. Ich habe folgenden PHP-Code

<?php
$text = "Hallo Hans";

if (strpos($text, "Hallo") != false) {
	echo "Hallo gefunden<br>";
}
if (strpos($text, "Hans") != false) {
	echo "Hans gefunden<br>";
}
?>

Wenn ich das Skrikpt aufrufe, kommt immer nur die Ausgabe "Hans gefunden".

Warum kommt "Hallo gefunden" nicht? Das Wort steht doch auch in $text drin.

Admin-Webhelfer
Administrator
Registriert seit:
  » 18.07.2017 20:00:00
Letzter Besuch:
  » 27.07.2021 20:15:40

Re: Warum gibt strpos false zurück

#2
zuletzt editiert von Admin-Webhelfer am 27.07.2021 20:41:49

Hallo pianist87 und Moderation/welcome


Das Problem an deinem Code ist die Abfrage mit dem Vergleichsoperator != (ungleich). Wenn du stattdessen den Operator !== verwendest, dann erhältst du das gewünschte Ergebnis.

$text = "Hallo Hans";

if (strpos($text, "Hallo") !== false) { // zu beachten ist der Operator !==
    echo "Hallo gefunden<br>";
}

Zur Erklärung: Die Funktion strpos() gibt die Position der zu suchenden Zeichenkette (2. Parameter) in der zu durchsuchenden Zeichenkette (1. Parameter) zurück. In deinem Beispiel oben steht das Wort "Hallo" ganz am Anfang der Zeichenkette. Somit gibt die Funktion den Zahlenwert 0 zurück. Wird nichts gefunden, so gibt die Funktion false zurück.

Bei einem Vergleich mit dem Operator != oder auch == wird nur der Wert verglichen. Dabei führt PHP ggf. vorher eine Typkonveriterung durch. In deinem Beispiel wird also der Integer-Wert 0 in den boolschen Wert false konvertiert. Dadurch ergibt sich dann die Abfrage false != false welche natürlich nicht zutrifft und du keine Ausgabe bekommst.


Bei PHP (und auch einigen weiteren Sprachen wie JavaScript) ist es daher wichtig, bei Vergleichen immer aufzupassen, ob der Typ oder nur der Wert bei dem Vergleich relevant ist.

Das ist zwar, vor allem wenn man von anderen Programmiersprachen wie C oder C++ kommt, am Anfang etwas gewöhnungsbedürftig, aber man gewöhnt sich daran. biggrin



P.S.: Weitere Informationen hierzu findest du hier.

Mit freundlichen Grüßen

Benjamin Jung

alias Admin-Webhelfer

» Hallo Gast • AnmeldenRegistrieren
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen OK