Podstawy PHP i MySQL
Temat 5 - Pętle
Powręt do spisu tematęw


W tym rozdziale:

  1. Pętla while
  2. Pętla for
Pętle

Pętle sę zbiorem instrukcji, ktęre są wykonywane przez program wielokrotnie. Aby nie przepisywaę wiele razy tego samego bloku poleceń, można umieścić go w pętli. Program powtarza pętlę określoną liczbę razy przez co wykonuje wiele razy dany blok poleceń. W pewnym sensie pętla jest instrukcję warunkowę, ktęra wykonuje kod dotąd, dopęki warunek jest spełniony.

Pętla while

Skęadnia pętli while wygląda następujęco:

while(warunek)
{
   polecenia, ktęre zostaną wykonane dotąd, dopóki warunek jest speęniony;
};

Stosując pętle należy uważąć, aby program się nie "zapętlił", czyli warunek musi być tak skonstruowany, aby pętla była ukoęczona.

<?php
while(5>1)
{
   echo'dziaęa';
};
?>

Powyższa pętla jest błędnie zbudowana, gdyż warunek 5>1 jest zawsze spełniony, dlatego pętla nie ma końca. PHP ma wbudowany system zabezpieczeń przed takimi przypadkami. Program będzie się wykonywaę przez 2 minuty (standardowe ustawienia PHP). Po tym czasie zostanie wyęwietlony komunikat o błędzie. Lepiej nie prębowaę - uęycie procesora 100 % :)
Wyprębowaę moęna za to dziaęanie poniższego skryptu.

<?php
$licznik=5;
while($licznik>0)
{
   echo"$licznik, ";
   $licznik--;
  
//zmniejszenie wartoęci zmiennej $licznik o jeden
};
?>


Rys. 5_1 - Efekt działania powyższego skryptu

Polecenia w pętli zostały wykonane 5 razy. Wartoęę zmiennej $licznik zostaęa pomniejszona o jeden przy każdym obrocie pętli, stęd warunek $licznik>0 jest spełniony do pewnego czasu.

ęwiczenie 5_1 - Wypisanie liczb od zadanej wartoęci do zera

  1. Naleęy umieęcię na swoim koncie WWW plik 05_01.php (do pobrania tutaj 05_01.zip).
  2. Naleęy uruchomić skrypt i obejrzeć efekt jego dziaęania.
  3. Naleęy przeanalizować budowę skryptu zwracając szczególną uwagę na objaęnienia umieszczone w komentarzach.

Zadanie 4 - Wypisanie liczb od zadanej wartoęci do zera z okreęlonym skokiem

  1. Naleęy przygotowaę plik o nazwie zadanie04.php i opublikowaę go na swoim koncie.
  2. Powinien zostać wyświetlony formularz z dwoma polami tekstowymi, w pierwsze pole wpisujemy liczbę, w drugim wartoęę skoku.
  3. Skrypt powinien wyświetlić liczby od zadanej do zera o zadanym skoku.
  4. Program powinien być przygotowany na następujące błędy uęytkownika:
    - brak podanej liczby lub wartości skoku,
    - podanie liczby ujemnej (program ma obsłużyć tylko liczby dodatnie),
    - sytuację, gdy wartoęę skoku jest większa od podanej liczby,
    - podana liczba lub skok nie sę liczbami (rozwięzanie znajduje się w ęwiczeniu 5_2 - ponięcej - uwaga problem kropki i przecinka oraz problem ewentualnego wielokrotnego ich uęycia),
    - zamieniaę przecinek na kropkę w ułamkach dziesiętnych (informacja - patrz poniżej - wskazęwka),
  5. Przykęad dziaęania skryptu znajduje się tutaj (konieczne jest poęęczenie z Internetem).

Wskazęwka:
W trakcie testowania poprawnoęci zadania przy użyciu ułamków dziesiętnych naleęy pamiętać, ię separatorem dziesiętnym w PHP jest kropka (nie przecinek). Aby jednak przygotować skrypt na ewentualne bęędy uęytkownika, moęna zamienię wpisany przecinek na kropkę, wykonuje to następujęca linia polecenia (wykorzystuje funkcję str_replace(); ktęra wyszukuje w cięgu tekstowym (trzeci argument funkcji) zadane fragmenty (pierwszy argument tej funkcji) i zamienia je na inny fragment (drugi argument tej funkcji).

$liczba = str_replace (",", ".", $liczba);

Jeżeli użytkownik wpisać wielokrotnie znak kropki lub przecinka wykonanie zadania nie będzie możliwe. Istnieje więc moęliwoęę zliczenia, ile razy zostaę uęyty poszukiwany znak w podanym cięgu tekstowym.

Pętla for

Zasada dziaęania pętli for jest taka sama. Obie pętle ręnię się jedynie składnię:

for(wartośść poczętkowa licznika obrotu pętli; warunek; skok zwiększenia licznika)
{
   polecenia, które zostaną wykonane dotęd, dopęki warunek jest speęniony
};

<?
for($licznik=5;$licznik>=0;$licznik--)
{
   echo"$licznik, ";
};
?>

W powyęszej pętli w jej argumentach określamy wszystkie warunki jej wykonywalnoęci.
Stosowanie pętli while lub for zależy praktycznie tylko od wygody programisty.

Przerwanie działania pętli - instrukcja break; i continue;

Istnieją sytuacje, w ktęrych trudno jest przewidzieć, jak długo pętla będzie się wykonywać. Może również nastąpić sytuacja, gdy dalsze wykonywanie pętli nie jest już nam potrzebne, gdyę otrzymalięmy interesujący nas wynik. Aby przerwać działanie pętli pomimo, ię warunek główny (argument pętli) jest nadal speęniany, służy znana nam już instrukcja break;
Instrukcja ta może być wykorzystana również do przerwania działania pętli, jeżeli wydaje się, ię pętla w ogóle się nie zakończy (zapętlenie).
Moęe się ręwnieę zdarzyę, ęe chcemy zrezygnowaę (przy występieniu pewnych warunkęw) z wykonywania jednego obrotu pętli, nie wstrzymujęc caęego jej biegu (wstrzymanie aktualnej iteracji pętli), w tym celu uęyjemy instrukcji continue;

ęwiczenie 5_2 - Znalezienie największego wspęlnego dzielnika

  1. Naleęy umieęcię na swoim koncie WWW plik 05_02.php (do pobrania tutaj 05_02.zip).
  2. W analizie kodu należy zwrócić uwagę na wykorzystanie instrukcji break; oraz wyrażenie regularne ereg(); Więcej informacji i zastosowaę wyrażeń regularnych spotkamy w kolejnych tematach.

Zadanie 5 - Wypisanie dzielników

  1. Naleęy umieęcię na swoim koncie WWW plik zadanie05.php.
  2. Formularz powinien wyświetlić jedno pole tekstowe. Po wpisaniu dodatniej liczby caękowitej w to pole formularza skrypt powinien wyęwietlić wszystkie dzielniki podanej liczby. (Przykład działania skryptu znajduje się tutaj - wymagane poęęczenie z Internetem).
  3. Należy się zastanowić, czy w tym zadaniu jest miejsce na użycie instrukcji break? Należy napisać odpowiedź.

 

Do zapamiętania

  1. Przed uruchomieniem skryptu z pętlą należy sprawdzić, czy ma ona szansę zakończyć swoje działanie.

 


Powrót do spisu tematów