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 kluczowe break 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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow