Pętla for w PHP

Podobnie jak wiele innych języków programowania, PHP posiada pętle typu for, po angielsku taki rodzaj pętli opisujemy jako for-loop lub tylko “for loop.” Pętle ułatwiają nam wykonywanie cyklicznych zadań i chyba nie przesadzę, jak napiszę, że każde powtarzające się zadanie do zrobienia w PHP da się uprościć za pomocą pętli. Najprościej na początek przygody z programowaniem pętlę zrozumieć jako mechanizm powtarzający jakąś instrukcję dopóty, dopóki wyrażenie kontrolujące tę pętlę zwraca true.

Pętla schodów
Pętla schodów | envato, autor chuyu2014

Bardziej skomplikowana definicja: Pętla typu for, jak każda inna pętla w PHP, to struktura kontrolna sterująca przebiegiem wykonania programu,  która umożliwia powtarzanie wykonywania grupy wyrażeń przez określoną liczbę razy. Pętla for w PHP jest instrukcją iteracyjną.

Powtarzanie grupy wyrażeń odbywa się, aż nie zajdą określone warunki, które przerwą wykonywanie pętli lub do nieskończoności w przypadku pętli nieskończonej, gdzie warunek zakończenia pętli nie ma prawa nigdy zajść.

W większości języków programowania opartych o składnię języka programowania C, a takim jest język PHP,  pętla for-loop ma  postać

for (initialization; condition; increment/decrement)

    statement

 Wyjaśnienia poszczególnych elementów ogólnej pętli wyglądają następująco:  

initialization, czyli inicjalizacja -  jest to domyślnie wykonywane wyrażenie na początku pierwszej iteracji naszej pętli. W tym miejscu  inicjujemy przeważnie  zmienną (można wiele i podajemy je po przecinku), które są naszym licznikiem powtórzeń. Często ta część nazywana jest prologiem pętli. 

condition, czyli warunek lub wyrażenie kontrolujące przebieg pętli -  wyrażenie znajdujące się w tym miejscu pętla sprawdza na początku każdej kolejnej iteracji. To wyrażenie służy za ograniczenie wykonywania pętli. 

increment/decrement, czyli inkrementacja/dekrementacja, a ja nazwę to dodatkowo modyfikacją-  wyrażenie to jest wykonywane na końcu każdej iteracji i po prostu  zwiększamy lub zmniejszamy licznik po każdej iteracji. Przeważnie spotkasz się z prostą inkrementacją typu $i++, często potrzebne jest odliczanie w dół $i--, ale mogą też być bardzo skomplikowane wyrażenia.

statement, czyli instrukcja -  jest to treść wyrażenia, która jest wykonywana raz na iterację. Często nazywamy to ciałem pętli. 

Pętlę for (for-loop) można podzielić na dwie części, na nagłówek określający i pilnujący warunki iteracji na wyrażenie, które ma wykonać się na każdą iterację.  

Należy zauważyć, że pętla typu for jest instrukcją sterowaną z góry, czyli najpierw musi zostać sprawdzony warunek (warunek sprawdzający, opisany na wzorze jako condition) dopiero potem, jeśli warunek ten zwróci true, jest wykonywane ciało pętli, jeśli wynik wyrażenia zwróci wartość false, pomijane jest ciało funkcji i program przechodzi do kolejnego wyrażenia za pętlą.  Źle napisana pętle może nie wywołać się nigdy, źle napisana pętla może okazać się pętlą nieskończoną. 

W języku PHP składnia pętli for  przedstawia się następująco: 

for ($i = 0; $i < 10; ++$i) {

echo $i . " iteracja.<br />\n";
}

Zwyczajowo przyjęło się, że zmienne sterujące pętlą oznaczane są zmienną $i, w przypadku pętli zagnieżdżonych potrzebujemy kolejnej zmiennej jak np. $j, 

Przykłady prostej pętli for w PHP

  • Pętla wykona się tylko 10 razy
  • Pętla wypisze kolejne numery iteracji
  • Numerowanie zaczynamy od 1, nie od 0
for($i=1;$i<11;$i++) {

print_r("Wykonuję przekrętkę pętli numer: {$i} \n");


}

Rezultat tej pętli powinien wyglądać następująco: 

Wykonuję przekrętkę pętli numer: 1 

Wykonuję przekrętkę pętli numer: 2 

Wykonuję przekrętkę pętli numer: 3 

Wykonuję przekrętkę pętli numer: 4 

Wykonuję przekrętkę pętli numer: 5 

Wykonuję przekrętkę pętli numer: 6 

Wykonuję przekrętkę pętli numer: 7 

Wykonuję przekrętkę pętli numer: 8 

Wykonuję przekrętkę pętli numer: 9 

Wykonuję przekrętkę pętli numer: 10 

Do jakich zadań nadaje się pętla for?

Pętlę for w PHP, jak i w innych językach programowania, stosuje się zwykle w zadaniach (pętlach) wyliczających, np. wypisz kolejno wszystkie liczby nieparzyste w zakresie od 1 do 100. Pętla taka ma postać: 

for($i = 1; $i < 100; $i += 2) {

	print_r("liczba $i\n");
   
}

Zobacz jak wypisać liczby parzyste za pomocą pętli for w inny sposób i zobacz jak wypisać liczby parzyste za pomocą innych konstrukcji w języku PHP.

Pusta pętla for - pętla nieskończona

Pętlę nieskończone w PHP w praktyce używamy np. w skryptach, które są odpowiedzialne za nasłuchiwanie lub ciągłe odpytywanie jakiegoś API. Najczęściej procesy z takim pętlami są utrzymywane ciągle za pomocą aplikacji do kontrolowania procesów typu Supervisor. Dobrą praktyką i przeważnie też potrzebą wydajnościową jest dodanie sensownej instrukcji usleep(), która opóźni wykonywanie kolejnej aplikacji i nie dobije naszego API.

for(;;) {

print_r("Tutaj pytam API\n");

usleep(1000);

}

Pętla nieskończona for w PHP ma najkrótszą formę nagłówka, nie można pozbyć się średników, bo interpreter zwróci błąd.  Pętle nieskończone są  czasami bardzo ciekawe i bardzo potrzebne, zostały tematem innego podlinkowanego artykułu. 

Pętla for bez paramerów

Pętla for pozwala nam na pominięcie dowolnego parametru w swoim nagłówku. Skrajny przykład z pominięciem wszystkich parametrów pozwala nam w prosty sposób utworzyć pętlę nieskończoną.

Brak poszczególnych parametrów pomiędzy średnikami zastąpi je wartością true i raczej rzadko będziesz stosował takie rozwiązanie przy pojedynczych parametrach.

Operator przecinka w pętli for, czyli pętla for dla dwóch zmiennych i więcej 

Za pomocą przecinka możesz przekazać kilka zmiennych i kilka warunków do pętli for. Wykonywane są w kolejności, żeby iteracja została wykonana każde z wyrażeń oddzielone przecinkiem musi zwrócić true. 

Zobacz prosty, ale ciekawy przykład użycia w pętli for kilku parametrów. Jest to symulator potrzebnych dni do zrzucenia wagi.

$wantLoosWeight = 10.0;
$planningWeightLossDays = 300;
$averageDailyWeightLoss = 0.2;

for ( $i = 1, $j = 0 ; $i <= $planningWeightLossDays; $i++, $j+= $averageDailyWeightLoss) {
      if($j >= $wantLoosWeight) {
       break;
      }
     print_r("Dzień odchudzania:  {$i} dzień\n");
     print_r("W dniu {$i} zrzucę już {$j} kg.\n");
     
      }

Przerwanie pętli for w PHP

Przerwanie bieżącej iteracji i przejście do początku nowej wykonujemy za pomocą dodania instrukcji continue a całkowite wyjście z pętli otrzymamy, wywołując instrukcję break. Break i continue działa identycznie w pozostałych typach pętli wbudowanych w język PHP. Przejrzyj proste przykłady użycia break i continue poniżej, a po więcej informacji odsyłam Cię do podlinkowanych artykułów, pokażę tam np. dodatkowe parametry, które przyjmują te instrukcje.

Chociaż przerywanie pętli jest pokazywane w wielu podręcznikach jako problematyczne do testowania i powodujące problemy, to czasem zachodzi potrzeba przerwania lub powtórzenia danej iteracji pętli i przejścia do następnej iteracji, lub wyjścia z niej i tyle. 

Instrukcję continue dobrze zilustruje w mojej ocenie kod, za pomocą którego chcemy wypisać tylko liczby nieparzyste. 

 

for ( $i = 1; $i <= 10; $i++) {

      if ($i % 2 == 0) {

        continue;

      }

     print_r("{$i}\n");

    }

Wynik takiej pętli to: 

1

3

5

7

9

Instrukcję break zilustruję kodem, który wyświetla trwający 100 dni  chalange w odchudzaniu.  Nie chcemy pokazywać dni, które jeszcze nie nastały. 

$currentDay = 10;
$planningWeightLossDays = 100;

 for ( $i = 1; $i <= $planningWeightLossDays; $i++) {

      
    

     print_r("Odchudzam się już {$i} dzień\n");

    

     if($i == $currentDay) {


       break;

      }



    }


$daysLeft = $planningWeightLossDays-$i;


print_r("Pozostało mi {$daysLeft} dni odchudzania") ;

Zobacz jak w pętli for sprawdzić, czy liczby są parzyste, czy nieparzyste.

  

Warte przeczytania: