Pomoc w ogarnięciu podstaw - pętla while.

0

Cześć,
Postanowiłem bez użycia tablic wyszukać w stringu konkretnego znaku i jeśli jest lub nie, wyświetlić adekwatny komunikat.
Mam kod który działa świetnie, jeśli jest znak #, wyświetla komunikat i przerywa pętlę. Co zrobić, aby jednokrotnie wyświetlił, że w stringu nie ma #? Gdy wstawiam echo 'Nie ma #' po i++, wyświetla komunikat kilkukrotnie, za każdym obiegiem pętli. Proszę o pomoc.

<?php
$sub = 'tes#asd';
$subLenght = strlen($sub); 
$i = 0;

while ($i < $subLenght) {
	if (substr($sub, $i,1) != '#') {
	 	$i++;
	 }
	else{
		echo 'W stringu jest #';
		break;
	}
}

1

od tego masz funkcję strstr strpos. Inna sprawa, że dziwne aby się nie wyświetlało, że nie ma skoro pętla dalej sprawdza każdą literkę.. Przecież skoro nie znalazł nic to wiadomo, że nie ma #. Ustaw jakąś flagę na ostatnim obiegu pętli typu false i poza pętlą sprawdź warunek, jeżeli false to echo cośtam.

1

Można też użyć wyrażeń regularnych:

$sub = 'tes#asd';
$sub_2 = 'test bez hasza';
$pat = '/.*?#+.*?/ims';
if (preg_match($pat, $sub)) {
    echo 'Znaleziono # w zmiennej $sub<br />';
}
else {
    echo 'Nie znaleziono # w zmiennej $sub<br />';
}
if (preg_match($pat, $sub_2)) {
    echo 'Znaleziono # w zmiennej $sub_2<br />';
}
else {
    echo 'Nie znaleziono # w zmiennej $sub_2<br />';
}
0
<?php
$sub = 'tes#asd';
$subLenght = strlen($sub); 
$i = 0;

while ($i < $subLenght) {
    if (substr($sub, $i,1) != '#') {
        $i++;
     }
    else{
        echo 'W stringu jest #';
        break;
    }
}
if ($i == strlen($sub)) print "W stringu nie ma #";
0

Jeżeli szukasz tylko pierwszego wystąpienia to tak jak wyżej było napisane, strpos jest najlepszą opcją.

<?php
$sub = 'te#asd';

if (strpos($sub, "#") !== false) {
    echo 'Jest #';
}
else {
    echo 'Nie ma #';
}

Jeżeli bardzo chcesz wykorzystać swoją wersję i tam dodać ten raz wyświetlony komunikat, to albo ustaw sobie flagę true/false, i sprawdź po pętli, albo ustaw $output= "nie ma #" przed pętlą i jeżeli w pętli znajdzie wystąpienie, to zmienia $output = "jest" i po pętli dajesz tylko echo $output;

0

Bardzo dziękuję za wszystkie podpowiedzi. Bardzo to pomogło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1