• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

If in while schleife funktioniert nicht

MarcusMüller

New member
Hallo Leute,
ich bin PHP-Anfänger und wollte meine Kenntnisse etwas erweitern. Daher habe ich als Übung einen PHP Code geschrieben, der mir nicht das erste Vorkommen eines substrings (wie in Strpos) liefert, sondern das x.-Vorkommen. Das ganze hat auch alles wunderbar funktioniert, allerdings konnte man als gesuchtes Vorkommen ($posx) auch eine 5000 eingeben, auch wenn der String den Substring gar keine 5000x enthielt (er ist den String dann halt wieder von neu durchgegangen). Daher habe ich mir gedacht, baue ich in die while-Schleife eine if-Klausel ein, die besagt, dass die Schleife abbrechen soll, wenn das gesuchte Vorkommen kleiner als die Anzahl des Substrings in dem String ist. Das Problem -> es funktioniert leider nicht. Was mache ich falsch? Habe bereits alles Mögliche ausprobiert (ohne das break etc.). Hier der Code:

PHP:
<?php
$string1 = "Holhhhhlahloplp";
$what = "l"; // gesuchter Substring
$posx = 4; // gesuchtes Vorkommen
$i = 0;
$pre = 0; // without possible -> but warning
while($i <= $posx -1) {
	if($posx > substr_count($string1, $what)){
		$pos = "Es gibt kein " . $posx . ". " . $what . " in dem String \"" . $string1 . "\"";
		break;}
	else{
	    $pos = strpos($string1, $what, $pre);
	    $pre = $pos + 1;
	    $i++;}}

Erklärung der Codes:

Der Code ist nicht anderes als der folgende Code nur halt alles in einer Schleife:
PHP:
<?php
$string1 = "Holhhhhlahloplp";
$what = "l";
$pos1 = strpos($string1, $what);
$pos2 = strpos($string1, $what, $pos1 + 1);
$pos3 = strpos($string1, $what, $pos2 + 1);
$pos4 = strpos($string1, $what, $pos3 + 1);
echo $pos4;?>

Grüße und Danke, Marcus
 
Zuletzt bearbeitet:
Diese Abfrage ist nicht nötig.

Schau' dir in der Dokumentation mal genau an, was passiert, wenn strpos den Substring nicht finden kann. Dieser Fall wird bei dir gar nicht abgeprüft und dort solltest du einhaken.
 
Hey KKapsner,
erstmal vielen Dank für die Antwort. Hört sich so an als könnte strpos denn Substring nicht finden, allerdings bin ich mir echt nicht bewusst wo. Ich habe den Code nochmal geändert, unzwar zu:
PHP:
<?php
$string1 = "Hollahopp"; 
$what = "o";
$posx = 2;
$i = 0;
$pre = 0;
while($i <= $posx -1) {
	    $pos = strpos($string1, $what, $pre);
	    $pre = $pos + 1;
	    $i++;}
if(substr_count($string1, $what) == false){
	$pos = "Es gibt kein \"" . $what . "\" in dem String \"" . $string1 . "\"";}
elseif($posx > substr_count($string1, $what)){
	$pos = "Es gibt kein " . $posx . ". \"" . $what . "\" in dem String \"" . $string1 . "\"";}
else{
	$pos++;
	$pos = "Es ist das " . $pos . ". Zeichen";}?>

Hier klappt auch alles und der Substring ist der gleiche. Auch wenn ich jetzt eine Lösung gefunden habe, wäre ich dir/euch dankbar, wenn man mir sagen könnte was ich vorher falsch gemacht habe.

Grüße Marcus
 
Hast du dir die Dokumentation von strpos wirklich angesehen? Nach dem Code zu urteilen nich - bitte hole das nach.
 
Zurück
Oben