W tym epizodzie, mając już pewne podstawy za sobą, skupimy się na pętlach w języku PHP, poznamy ich budowę i zastosowanie.
W PHP mamy do czynienia z następującymi pętlami:
- for
- while
- do-while
- foreach
Poznajmy je!
Pętla for – klasyczna pętla
Pętla for to klasyczna konstrukcja, bardziej podobna do pętli for znanych z języków C++ czy JavaScript, niż tej znanej z Pythona.
Składa się z trzech bloków. W bloku pierwszym tworzymy jakąś zmienną, jest to blok init.
W bloku drugim stawiamy warunek jak długo ta pętla ma być wykonywana. Jest to blok condition, blok warunkowy. Warunek jest sprawdzany przy każdym obrocie pętli.
Blok trzeci, to blok iteracji. Piszemy tam, co ma być wykonane po każdym obrocie pętli (zazwyczaj jest to zwiększenie zmiennej z bloku init o 1).
Oto przykład:
<?php
for($num = 1; $num <= 10; $num++)
{
//(...)
}
Mamy tutaj blok init (stwórz zmienną num o wartości 1), blok condition (kontynuuj pętlę tak długo, jak num jest mniejsze lub równe 10) oraz blok iteracji (za każdym razem zwiększ num o 1).
Możemy teraz coś sobie w tej pętli wykonać:
<?php
for($num = 1; $num <= 10; $num++)
{
echo $num . "</br>";
}
Ten kod wypisuje liczby od 1 do 10, z odstępami w postaci tagu <br> (czyli „enter” w HTML).
Oto pętla, która idzie od liczby 65 (która odpowiada literze „A”) do liczby 90 (litera „Z”) i zamienia liczbę na jej odpowiednią literę używając przeznaczonej do tego funkcji chr:
for ($i=65; $i<=90; $i++) {
echo chr($i);
}
Klasyczna pętla while
Pętla while oznacza rób coś tak długo, jak warunek while jest prawdziwy. W przypadku tej pętli musimy sobie sami stworzyć zmienną, którą będziemy sprawdzać i sami podnosić o jeden przy każdym obrocie pętli (albo aplikować jakąkolwiek inną logikę do niej).
Weźmy sobie przykład tej pętli for, która tworzy zmienną i równą 65, działa tak długo, aż i przestaje być mniejsze/równe 90, podnosząc i o 1 i zamieniając je z liczby na literę:
for ($i=65; $i<=90; $i++) {
echo chr($i);
}
Teraz zapiszemy sobie to samo przy użyciu pętli while:
$number = 60;
while($number <= 90) {
echo chr($number);
$number++;
}
Jak widać tutaj while przyjmuje tylko warunek. Sami musimy sobie wcześniej tę zmienną stworzyć i sami musimy pamiętać o zwiększeniu o jeden na końcu.
Pętla do-while – najpierw działaj, później sprawdź warunek
Pętla do-while to coś ciekawego. Taka pętla działa w ten sposób, że najpierw wykonuje jakąś akcję, później sprawdza warunek, czy ma się dalej wykonywać.
Pętla while nigdy się nie wykona, jeżeli warunek będzie nieprawdziwy. Oto przykład:
while(false) {
echo "Hello World";
}
Pętla do-while wykona się przynajmniej raz, dopiero później sprawdzi, czy podany jej warunek jest prawdziwy. Oto przykłady:
do {
echo "Hello World</br>";
} while(false);
do {
echo "Hello World</br>";
} while(2+2===5);
Dostajemy 2 razy „Hello World” (po jednym na pętlę) choć żaden z tych warunków nie był prawdziwy. Ale do-while najpierw działa, później warunki sprawdza.
Oto przykład:
<?php
do {
$num = random_int(1,6);
echo "$num </br>";
} while ($num !== 6);
Ta pętla losuje liczbę od 1 do 6, wyświetla ją, następnie sprawdza, czy wylosowana liczba to 6. Jeżeli nie, kontynuuje wykonywanie się.
Możemy powiedzieć, że przynajmniej raz się wykona i jeżeli wtedy wylosuje 6 to będzie to jej ostatni raz. Jeżeli jednak nie – będzie kontynuowana tak długo, aż warunek zostanie spełniony.
Pętla foreach – po tablicach przez kopię i referencję
Pętla foreach jest podobna do pętli for znanej z języka Python albo pętli foreach znanych z innych języków.
Oto przykład iterowania po tablicy w PHP
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as $value) {
echo "$value</br>";
}
Pętla foreach iteruje po każdym elemencie tablicy $arr, nazywając ten element $value i w ten sposób go wyświetlając.
Możemy też iterować „przez referencję” co pozwala nam modyfikować elementy tablicy.
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
print_r($arr);
Tutaj znak „&” oznacza, że nie bierzemy do pętli kopii elementu danej tablicy, ale ten element. Możemy go zatem zamienić na jego wartość razy 2.
Funkcja print_r służy drukowaniu tablic, które napisami nie są i aby je wypisać na ekranie takiej funkcji musimy użyć.
Pętla foreach – zakresy i tablice asocjacyjne
Za pomocą foreach możemy iterować nie tylko po tablicach. Możemy przechodzić na przykład po zakresach:
<?php
foreach (range(1,10) as $num) {
echo "$num</br>";
}
Tutaj przechodzimy po liczbach w zakresie od 1 do 10 (włącznie) i te liczby wypisujemy.
Możemy podać też trzeci argument:
<?php
foreach (range(2,10, 2) as $num) {
echo "$num</br>";
}
Teraz nasza pętla przejdzie po liczbach od 2 do 10 włącznie, ale skacząc co dwa. Dostaniemy 2,4,6,8,10.
Możemy jako zakres używać też liter:
<?php
foreach (range("a", "z") as $letter) {
echo "$letter</br>";
}
Taka pętla przechodzi po literach w zakresie od „a” do „z” i wypisuje je. To samo możemy zrobić z wielkimi literami:
<?php
foreach (range("A", "Z") as $letter) {
echo "$letter</br>";
}
Mamy też w PHP coś takiego, jak tablice asocjacyjne. To nic innego jak znane z innych języków programowania, np. z Pythona, słowniki zawierające pary klucz-wartość.
Po takich również możemy przejść w pętli foreach (przykład z internetu):
<?php
$freelancer = array(
"name" => "Eric",
"email" => "Eric@gmail.com",
"age" => 22,
"gender" => "male"
);
// Loop through employee array
foreach($freelancer as $key => $value) {
echo $key . ": " . $value . "<br>";
}
W ten sposób tworzymy tablicę asocjacyjną i przechodzimy po niej w pętli foreach, mając dostęp do klucza i wartości. Otrzymujemy:
name: Eric
email: Eric@gmail.com
age: 22
gender: male
Myślę, że to wszystko. W PHP mamy do czynienia z pętlami while, do-while, for oraz foreach. Tę ostatnią możemy używać do przechodzenia po tablicach (listach), tablicach asocjacyjnych (inaczej słownikach) oraz zakresach.
Pętle for, while i do-while są do siebie podobne, ale mają swoje różnice.
W następnych odcinkach będziemy kontynuować poznawanie języka PHP.