Szukaj…
Wprowadzenie
Pętle są podstawowym aspektem programowania. Pozwalają programistom tworzyć kod, który powtarza się dla określonej liczby powtórzeń lub iteracji . Liczba iteracji może być jawna (na przykład 6 iteracji) lub kontynuowana do momentu spełnienia pewnego warunku („dopóki piekło się nie zamrozi”).
Ten temat obejmuje różne typy pętli, powiązane z nimi instrukcje sterujące i ich potencjalne zastosowania w PHP.
Składnia
- for (licznik początkowy; licznik testowy; licznik przyrostowy) {/ * kod * /}
- foreach (tablica jako wartość) {/ * kod * /}
- foreach (tablica jako klucz => wartość) {/ * kod * /}
- while (warunek) {/ * kod * /}
- do {/ * kod * /} while (warunek);
- anyloop {kontynuuj; }
- anyloop {[ anyloop ...] {kontynuuj int; }}
- anyloop {przerwa; }
- anyloop {[ anyloop ...] {break int; }}
Uwagi
Często przydatne jest kilkukrotne wykonanie tego samego lub podobnego bloku kodu. Zamiast kopiowania i wklejania instrukcji prawie równe pętle zapewniają mechanizm wykonywania kodu określoną liczbę razy i przechodzenia przez struktury danych. PHP obsługuje następujące cztery typy pętli:
-
for
-
while
-
do..while
-
foreach
Aby kontrolować te pętle, dostępne są instrukcje continue
i break
.
dla
Instrukcja
for
jest używana, gdy wiesz, ile razy chcesz wykonać instrukcję lub blok instrukcji.
Inicjator służy do ustawienia wartości początkowej licznika liczby iteracji pętli. W tym celu można zadeklarować zmienną i tradycyjnie nazywa się ją $i
.
Poniższy przykład iteruje 10 razy i wyświetla liczby od 0 do 9.
for ($i = 0; $i <= 9; $i++) {
echo $i, ',';
}
# Example 2
for ($i = 0; ; $i++) {
if ($i > 9) {
break;
}
echo $i, ',';
}
# Example 3
$i = 0;
for (; ; ) {
if ($i > 9) {
break;
}
echo $i, ',';
$i++;
}
# Example 4
for ($i = 0, $j = 0; $i <= 9; $j += $i, print $i. ',', $i++);
Oczekiwany wynik to:
0,1,2,3,4,5,6,7,8,9,
dla każdego
Instrukcja
foreach
służy do przechodzenia między tablicami.
Dla każdej iteracji wartość bieżącego elementu tablicy jest przypisywana do zmiennej $value
, a wskaźnik tablicy jest przesuwany o jeden, aw następnej iteracji przetwarzany będzie następny element.
Poniższy przykład wyświetla elementy w przypisanej tablicy.
$list = ['apple', 'banana', 'cherry'];
foreach ($list as $value) {
echo "I love to eat {$value}. ";
}
Oczekiwany wynik to:
I love to eat apple. I love to eat banana. I love to eat cherry.
Możesz również uzyskać dostęp do klucza / indeksu wartości za pomocą foreach:
foreach ($list as $key => $value) {
echo $key . ":" . $value . " ";
}
//Outputs - 0:apple 1:banana 2:cherry
Domyślnie $value
jest kopią wartości z $list
, więc zmiany dokonane w pętli nie zostaną później odzwierciedlone na $list
.
foreach ($list as $value) {
$value = $value . " pie";
}
echo $list[0]; // Outputs "apple"
Aby zmodyfikować tablicę w pętli foreach
, użyj operatora &
, aby przypisać $value
przez odniesienie. Ważne jest, aby później unset
zmienną, aby ponowne użycie $value
innym miejscu nie nadpisało tablicy.
foreach ($list as &$value) { // Or foreach ($list as $key => &$value) {
$value = $value . " pie";
}
unset($value);
echo $list[0]; // Outputs "apple pie"
Można również zmodyfikować elementy tablicy w pętli foreach
, odwołując się do klucza tablicy bieżącego elementu.
foreach ($list as $key => $value) {
$list[$key] = $value . " pie";
}
echo $list[0]; // Outputs "apple pie"
przerwa
break
kluczowebreak
natychmiast kończy bieżącą pętlę.
Podobny do continue
oświadczenie, a break
wstrzymuje wykonanie pętli. W przeciwieństwie do continue
oświadczenie, jednak break
powoduje natychmiastowe przerwanie pętli i ponownie nie ma wykonać instrukcję warunkową.
$i = 5;
while(true) {
echo 120/$i.PHP_EOL;
$i -= 1;
if ($i == 0) {
break;
}
}
Ten kod wygeneruje
24
30
40
60
120
ale nie wykona przypadku, w którym $i
wynosi 0, co spowodowałoby błąd krytyczny spowodowany dzieleniem przez 0.
Instrukcja break może być również wykorzystana do wyjścia z kilku poziomów pętli. Takie zachowanie jest bardzo przydatne podczas wykonywania zagnieżdżonych pętli. Na przykład, aby skopiować tablicę ciągów do ciągu wyjściowego, usuwając wszystkie symbole #
, aż ciąg wyjściowy będzie miał dokładnie 160 znaków
$output = "";
$inputs = array(
"#soblessed #throwbackthursday",
"happy tuesday",
"#nofilter",
/* more inputs */
);
foreach($inputs as $input) {
for($i = 0; $i < strlen($input); $i += 1) {
if ($input[$i] == '#') continue;
$output .= $input[$i];
if (strlen($output) == 160) break 2;
}
$output .= ' ';
}
Polecenie break 2
natychmiast kończy wykonywanie pętli wewnętrznej i zewnętrznej.
zrobić ... podczas
Instrukcja
do...while
wykona blok kodu przynajmniej raz - wówczas powtórzy pętlę, dopóki spełniony będzie warunek.
Poniższy przykład zwiększy wartość $i
co najmniej raz i będzie kontynuował inkrementację zmiennej $i
o ile ma ona wartość mniejszą niż 25;
$i = 0;
do {
$i++;
} while($i < 25);
echo 'The final value of i is: ', $i;
Oczekiwany wynik to:
The final value of i is: 25
kontyntynuj
continue
wstrzymuje słowa kluczowego bieżącej iteracji pętli, ale nie zakończyć pętlę.
Podobnie jak w break
oświadczeniu continue
wypowiedź znajduje się wewnątrz ciała pętli. Kiedy wykonywany, continue
wypowiedź powoduje natychmiastowe wykonanie skoku do warunkowego pętli.
W poniższym przykładzie pętla wypisuje komunikat na podstawie wartości w tablicy, ale pomija określoną wartość.
$list = ['apple', 'banana', 'cherry'];
foreach ($list as $value) {
if ($value == 'banana') {
continue;
}
echo "I love to eat {$value} pie.".PHP_EOL;
}
Oczekiwany wynik to:
I love to eat apple pie.
I love to eat cherry pie.
Instrukcja continue
może być również użyta do natychmiastowego kontynuowania wykonania do zewnętrznego poziomu pętli poprzez określenie liczby poziomów pętli do przeskoczenia. Weźmy na przykład takie dane jak
Owoc | Kolor | Koszt |
---|---|---|
jabłko | Czerwony | 1 |
Banan | Żółty | 7 |
wiśnia | Czerwony | 2) |
Winogrono | Zielony | 4 |
Aby zrobić ciasta z owoców, które kosztują mniej niż 5
$data = [
[ "Fruit" => "Apple", "Color" => "Red", "Cost" => 1 ],
[ "Fruit" => "Banana", "Color" => "Yellow", "Cost" => 7 ],
[ "Fruit" => "Cherry", "Color" => "Red", "Cost" => 2 ],
[ "Fruit" => "Grape", "Color" => "Green", "Cost" => 4 ]
];
foreach($data as $fruit) {
foreach($fruit as $key => $value) {
if ($key == "Cost" && $value >= 5) {
continue 2;
}
/* make a pie */
}
}
Gdy continue 2
instrukcja jest wykonywana, wykonanie natychmiast powraca do $data as $fruit
ustawicznego zewnętrzną pętlę i omijając inny kod (w tym warunkowe w pętli wewnętrznej.
podczas
Instrukcja
while
wykona blok kodu, jeśli i dopóki wyrażenie testowe jest prawdziwe.
Jeśli wyrażenie testowe jest prawdziwe, blok kodu zostanie wykonany. Po wykonaniu kodu wyrażenie testowe zostanie ponownie ocenione, a pętla będzie kontynuowana do momentu, aż wyrażenie testowe okaże się fałszywe.
Poniższy przykład iteruje, aż suma osiągnie 100 przed zakończeniem.
$i = true;
$sum = 0;
while ($i) {
if ($sum === 100) {
$i = false;
} else {
$sum += 10;
}
}
echo 'The sum is: ', $sum;
Oczekiwany wynik to:
The sum is: 100