30 dniowy kurs php – dzień 9 – while


Back-end (php, mysql)

Dzisiaj poznasz pętlę. W zasadzie dwie. „While” i „do while”. Budowa pętli wygląda tak samo jak budowa konstrukcji logicznych typu if czy switch. Jaka jest więc między nimi różnica? Konstrukcja if czy switch jest wykonywana tylko raz. Pętle natomiast wykonują się tak długo, aż osiągną zamierzony rezultat.

Niesie to jednak za sobą pewne problemy techniczne. Jeśli źle zdefiniujesz pętlę będzie ona wykonywała się w nieskończoność, znacząco obciążając tym samym serwer.

Jak wygląda konstrukcja while

<?php

$i = 1;
while($i <= 7)
  {
  echo "Mamy nr " . $i . "<br />";
  $i++;
  }

/* wyświetli:

Mamy nr 1
Mamy nr 2
Mamy nr 3
Mamy nr 4
Mamy nr 5
Mamy nr 6
Mamy nr 7

*/  

?>

Sprawa dość prosta. Pętla działa dopóki warunek zostanie spełniony. Warunkiem jest $i mniejsze lub równe 7. Początkowo $i ma wartość 1 po uruchomieniu pętli zostaje wyświetlona wartość $i, a następnie zostaje zwiększona o 1 przez komendę $i++. I tak w kółko. Za każdym razem sprawdzany jest warunek, za każdym razem liczba rośnie o 1 i pętla działa dopóki warunek zostanie spełniony.

Do while

Pętla działa identycznie jak while, tylko zamiast sprawdzania warunku na początku jest on sprawdzany na końcu. W praktyce wygląda to tak:

<?php

$i = 1;
do
  {
  echo "Mamy nr " . $i . "<br />";
  $i++;
  }
while($i <= 7);

/* wyświetli:

Mamy nr 1
Mamy nr 2
Mamy nr 3
Mamy nr 4
Mamy nr 5
Mamy nr 6
Mamy nr 7

*/

?>

Różnice

W while pętla zostanie wykonana tylko w przypadku kiedy warunek jest nie spełniony i będzie wykonywana aż do momentu jego spełnienia. W do while pętla zostaje wykonana przynajmniej raz, a dopiero później sprawdza warunek.

Obrazowy przykład

Pętle while i do while jak już zauważyłeś wykonuje się głównie na zasadzie zwiększania wartości i sprawdzania czy wartość została już osiągnięta. Można jednak w pętlę wpleść jeszcze dodatkowe deklaracje np. typu if

<?php

$speed = 0;

while ($speed < 100)
{
	if ($speed >= 50)
	{
		echo 'zwolnij! ';
	}
	$speed += 10;
	echo "jedziesz $speed km/h <br/>";
}

?>

W ten sposób po przekroczeniu 60 km/h wyświetli się komunikat zwolnij!.