środa,
Pętla while
Pętle pozwalają na wielokrotne wykonywanie sekwencji instrukcji. W języku PHP występuje kilka rodzajów pętli, wśród których znalazła się pętla while. Działa ona podobnie jak jej odpowiednik w języku C. Za każdym razem na początku pętli sprawdzany jest warunek, musi być on spełniony, aby instrukcje umieszczone w pętli zostały wykonane.
Pierwszy przykład jest bardzo prosty, wyświetlane są liczby od jednego do dziesięciu. Zmienna $i początkowo otrzymuje wartość jeden. Instrukcje w pętli wykonują się, jeśli wartość $i nie przekroczyła dziesięciu. W każdym kroku (iteracji) pętli wyświetlana jest wartość zmiennej $i, która następnie jest zwiększana o jeden (inkrementowana).
<?php
$i = 1;
while($i < 11) {
echo $i;
$i++;
}
?>
Powyższe zadanie można zrealizować za pomocą mniejszej ilości kodu. W kolejnym przykładzie w każdym kroku pętli zmienna $i jest najpierw zwiększana o jeden (preinkrementacja), a następnie wyświetlona. Dlatego jej początkowa wartość to zero, modyfikacji uległ także warunek. Jeśli w pętli wykonywana jest tylko jedna instrukcja, nawiasy są zbędne. Kodu jest mniej, ale niewątpliwie jest także mniej czytelny.
<?php
$i = 0;
while($i < 10) echo ++$i;
?>
Kolejny przykład to generowanie wszystkich możliwych czterocyfrowych pinów. Zrealizowano to w bardzo prosty sposób, wyświetlane są liczby od zera do 9999, które sformatowano, stosując wypełnienie zerami do czterech znaków.
<?php
$i = 0;
while($i < 10000) {
printf("%04d ", $i++);
}
?>
W poniższym przykładzie nowością jest zastosowany warunek. Wartość zmiennej $i w każdym kroku pętli jest zmniejszana, jeśli osiągnie zero, iteracje przestaną być wykonywane. Dzieje się tak, dlatego że logiczną wartością zera jest fałsz.
<?php
$i = 10;
while($i--) {
echo "CKZiU!
";
}
?>
Poniższy kod w swoim działaniu trochę przypomina popularną grę liczbową. Nie zawsze wygenerowane liczby będą nadawać się do wykorzystania w tej grze, nie zapewniono braku możliwości wystąpienia powtórzeń wśród wygenerowanych liczb. Niedogodność tą usunięto w następnym przykładzie. Funkcja mt_rand() generuje pseudolosową liczbę z zadanego zakresu.
<?php
$i = 6;
while($i--) {
printf("%s
", mt_rand(1, 49));
}
?>
Aby zapewnić unikalność wygenerowanych liczb, wykorzystano tablicę utworzoną za pomocą funkcji range(). W każdym kroku pętli generowana jest liczba z zakresu od zera do wartości reprezentującej aktualną ilość elementów tablicy pomniejszonej o jeden. Pomniejszenie zastosowano, ponieważ indeksy tablicy liczone są od zera. Za „wylosowaną” liczbę przyjmowana jest wartość elementu tablicy oznaczonego wygenerowanym indeksem. Następnie element ten jest usuwany z tablicy. W numeracji elementów pojawia się luka, jednak łatwo to „naprawić” wykorzystując funkcję sort(), która automatycznie nadaje indeksy numeryczne.
<?php
$i = 6;
$numbers = range(1, 49);
while($i--) {
$x = mt_rand(0, count($numbers) - 1);
echo "$numbers[$x] ";
unset($numbers[$x]);
sort($numbers);
}
?>
Powyższe zadanie można zrealizować w trochę bardziej zwięzłej formie z wykorzystaniem funkcji tablic. Elementy wygenerowanej tablicy liczb przetasowano z pomocą funkcji shuffle(). Po tej operacji są one ustawione w kolejności pseudolosowej, w przykładzie pobrano pierwszych sześć elementów.
<?php
$numbers = range(1,49);
shuffle($numbers);
echo implode(' ', array_slice($numbers, 0, 6));
?>