Kursy

Pętle while i do...while

Pętle while i do...while

pętla while

Wspomniałem już, że PHP oferuje kilka możliwości zapętlania, czyli powtarzania pewnych czynności. Poznałeś już pętlę for. Niestety jej wadą jest fakt, że musieliśmy okreśłić skończoną liczbę jej powtórzeń. A co w wypadku, gdy nie wiemy ile razy należy powtórzyć jakąś czynność, gdy należy wykonać pętlę, aż do skutku? Tu przychodzi z pomocą pętla while. Oto jej postać:

while (warunek) {
blok instrukcji
}


Oznacza to dosłownie: Dopóki jest spełniony warunek, wykonuj instrukcje. Czyli pętla sprawdza, czy jest spełniony warunek, jeśli tak (warunek posiada wartość TRUE), to wykonuje podany blok instrukcji, aż do momentu gdy warunek będzie posiadał wartość FALSE - czyli nie będzie spełniony.

Wróćmy do naszego przykładu z wyświetleniem kolejnych liczb od 1 do 50. Poprzednio użyliśmy w tym celu pętli for, to samo możemy uzyskać za pomocą pętli while:

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Odlicznie do 50<TITLE>
</HEAD>
<BODY>

<?
$i=1;
while ($i<=50) {
print("$i ");
$i++;
}
?>

</BODY>
</HTML>


Rezultat wykonania tego skryptu będzie identyczny, jak w przypadku pętli for.

Wykorzystajmy teraz pętlę while do sytuacji, gdzie nie wiemy dokładnie ile razy pętla zostanie wykonana. Stwórzmy skrypt, który będzie wyświetlał kolejne dni tygodnia, począwszy od dnia dzisiejszego, aż do najbliższej soboty. Zanim jednak to nastąpi musimy poznać bliżej dwie funkcje PHP: date( ) oraz time( )



funkcja time ( ) zwraca w formie liczby integer aktualny znacznik czasu. Znacznik czasu określa ilość sekund jakie upłynęły od początku epoki - czyli od 1 stycznia 1970.

funkcja date (format, znacznik_czasu ) zwraca łańcuch znaków opisujący datę. Funkcja date posiada dwa argumenty: format - informuje funkcję date o postaci, w jakiej ma być wyświetlona data. Format "l" oznacza dzień tygodnia. Co oznacza znacznik czasu już wiesz. Jeśli znacznik czasu nie zostanie podany, to funkcja date użyje aktualnej daty.


 

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Kiedy sobota?<TITLE>
</HEAD>
<BODY>

<?
$data_dzisiaj=time( );

print ("Do soboty pozostają jeszcze: <OL>");

while (date ("l", $data_dzisiaj) !="Saturday") {
print ("<LI>". date ("l", $data_dzisiaj));
$data_dzisiaj += (60*60*24);
}
print ("</OL>");

?>

</BODY>
</HTML>


W zmiennej $data_dzisiaj przechowujemy aktualną datę za pomocą ilości sekund, które upłynęły od 1 stycznia 1970 (wykorzystujemy tu funkcję time ( )). Następnie za pomocą funkcji print wyświetlamy tekst, który opisze nam uzyskane wyniki. Pętla while sprawdza, czy data zapisana w zmiennej $data_dzisiaj to piątek. Jeśli okaże się, że to piątek, to pętla while zostanie zakończona. Jeśli jednak aktualny dzień nie jest piątkiem, to wyświetlony zostanie element listy z dniem tygodnia, a do wartości zapisanej w zmiennej $data_dzisiaj dodawane są 24 godziny (60*60*24).

pętla do ... while

Pętla do... while ma postać:

do{
blok instrukcji
}
while (warunek)


Inaczej oznacza to: wykonuj instrukcje dopóki jest spełniony warunek. Różnica pomiędzy pętlą wile a pętlą do... while tkwi w miejscu sprawdzania warunku. Pętla while sprawdza warunek przed wejściem, czyli zanim zostanie wykonany blok instrukcji. Zauważ, że blok instrukcji wcale nie musi być wykonany ( jeśli warunek posiada wartość FALSE). Pętla do.. while sprawdza warunek po pierwszym wykonaniu bloku instrukcji w pętli. Wynika z tego, że blok instrukcji w pętli do.. while musi być wykonany przynajmniej raz, bez względu na warunek.

Wróćmy do programu, który wyświetlał nam dni pozostałe do soboty. Zauważ, że jeśli aktualnym dniem będzie sobota, to pętla nie zostanie w ogóle wykonana a w oknie przeglądarki nie pojawi się żaden dzień. Jeżeli chcesz, aby został wyświetlony napis "Saturday" (jeśli bieżącym dniem będzie sobota) użyj pętli do ... while. Stanie się tak dlatego, ponieważ kod pętli zostanie wykonany nim będzie sprawdzona data zapisana w zmiennej $data_dzisiaj. Zmieniając typ pętli na do.. while, wyświetli ona wszystkie dni, aż do następnej soboty.

<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Kiedy sobota?<TITLE>
</HEAD>
<BODY>

<?
$data_dzisiaj=time( );

print ("Do następnej soboty pozostają jeszcze: <OL>");

do {
print ("<LI>". date ("l", $data_dzisiaj));
$data_dzisiaj += (60*60*24);
}
while (date ("l", $data_dzisiaj) !="Saturday");

print ("</OL>");

?>

</BODY>
</HTML>



Pobierz przykład: do_while.zip