PHP                
            Iteracja tablicy
        
        
            
    Szukaj…
Składnia
- for ($ i = 0; $ i <count ($ array); $ i ++) {incremental_iteration (); }
 - for ($ i = liczba ($ tablica) - 1; $ i> = 0; $ i--) {reverse_iteration (); }
 - foreach ($ data as $ datum) {}
 - foreach ($ data as $ key => $ datum) {}
 - foreach ($ data as & $ datum) {}
 
Uwagi
Porównanie metod iteracji tablicy
| metoda | Korzyść | 
|---|---|
 foreach  |  Najprostsza metoda iteracji tablicy. | 
 foreach przez odniesienie  | Prosta metoda iteracji i zmiany elementów tablicy. | 
 for z przyrostowym indeksem  | Umożliwia iterację tablicy w dowolnej sekwencji, np. Pomijanie lub cofanie wielu elementów | 
| Wskaźniki tablicy wewnętrznej | Nie jest już konieczne używanie pętli (aby można było iterować po każdym wywołaniu funkcji, odebraniu sygnału itp.) | 
Iterowanie wielu tablic razem
Czasami trzeba razem iterować dwie tablice tej samej długości, na przykład:
$people = ['Tim', 'Tony', 'Turanga'];
$foods = ['chicken', 'beef', 'slurm'];
  array_map to najprostszy sposób na osiągnięcie tego: 
array_map(function($person, $food) {
    return "$person likes $food\n";
}, $people, $foods);
 który wyświetli:
Tim likes chicken
Tony likes beef
Turanga likes slurm
 Można to zrobić za pomocą wspólnego indeksu:
assert(count($people) === count($foods));
for ($i = 0; $i < count($people); $i++) {
    echo "$people[$i] likes $foods[$i]\n";
}
  Jeśli dwie tablice nie mają kluczy przyrostowych, można array_values($array)[$i] aby zastąpić $array[$i] . 
Jeśli obie tablice mają tę samą kolejność kluczy, możesz także użyć pętli foreach z kluczem na jednej z tablic:
foreach ($people as $index => $person) {
    $food = $foods[$index];
    echo "$person likes $food\n";
}
 Oddzielne tablice można zapętlać tylko wtedy, gdy mają tę samą długość i mają tę samą nazwę klucza. Oznacza to, że jeśli nie podasz klucza i są one ponumerowane, wszystko będzie dobrze, lub jeśli nadasz nazwę kluczom i umieścisz je w tej samej kolejności w każdej tablicy.
 Możesz także użyć array_combine . 
$combinedArray = array_combine($people, $foods);
// $combinedArray = ['Tim' => 'chicken', 'Tony' => 'beef', 'Turanga' => 'slurm'];
 Następnie możesz przejść przez to, robiąc to samo co poprzednio:
foreach ($combinedArray as $person => $meal) {
    echo "$person likes $meal\n";
}
        Korzystanie z indeksu przyrostowego
Ta metoda polega na zwiększaniu liczby całkowitej od 0 do największego indeksu w tablicy.
$colors = ['red', 'yellow', 'blue', 'green'];
for ($i = 0; $i < count($colors); $i++) {
    echo 'I am the color ' . $colors[$i] . '<br>';
}
  Pozwala to również na iterację tablicy w odwrotnej kolejności bez użycia array_reverse , co może spowodować obciążenie, jeśli tablica jest duża. 
$colors = ['red', 'yellow', 'blue', 'green'];
for ($i = count($colors) - 1; $i >= 0; $i--) {
    echo 'I am the color ' . $colors[$i] . '<br>';
}
 Za pomocą tej metody można łatwo pominąć lub przewinąć indeks.
$array = ["alpha", "beta", "gamma", "delta", "epsilon"];
for ($i = 0; $i < count($array); $i++) {
    echo $array[$i], PHP_EOL;
    if ($array[$i] === "gamma") {
        $array[$i] = "zeta";
        $i -= 2;
    } elseif ($array[$i] === "zeta") {
        $i++;
    }
}
 Wynik:
alpha
beta
gamma
beta
zeta
epsilon
  Dla tablic, które nie mają indeksów przyrostowych (w tym tablic z indeksami w odwrotnej kolejności, np. [1 => "foo", 0 => "bar"] , ["foo" => "f", "bar" => "b"] ), nie można tego zrobić bezpośrednio. array_values lub array_keys może być stosowany zamiast: 
$array = ["a" => "alpha", "b" => "beta", "c" => "gamma", "d" => "delta"];
$keys = array_keys($array);
for ($i = 0; $i < count($array); $i++) {
    $key = $keys[$i];
    $value = $array[$key];
    echo "$value is $key\n";
}
        Używanie wewnętrznych wskaźników tablicy
Każda instancja tablicy zawiera wewnętrzny wskaźnik. Manipulując tym wskaźnikiem, różne elementy tablicy można pobrać z tego samego wywołania w różnym czasie.
 Za pomocą each 
 Każde wywołanie each() zwraca klucz i wartość bieżącego elementu tablicy i zwiększa wewnętrzny wskaźnik tablicy. 
$array = ["f" => "foo", "b" => "bar"];
while (list($key, $value) = each($array)) {
    echo "$value begins with $key";
}
  Korzystanie z next 
$array = ["Alpha", "Beta", "Gamma", "Delta"];
while (($value = next($array)) !== false) {
    echo "$value\n";
}
  Zauważ, że w tym przykładzie założono, że żadne elementy w tablicy nie są identyczne z wartością logiczną false . Aby temu zapobiec, użyj key aby sprawdzić, czy wskaźnik wewnętrzny osiągnął koniec tablicy: 
$array = ["Alpha", "Beta", "Gamma", "Delta"];
while (key($array) !== null) {
    echo current($array) . PHP_EOL;
    next($array);
}
 Ułatwia to także iterację tablicy bez bezpośredniej pętli:
class ColorPicker {
    private $colors = ["#FF0064", "#0064FF", "#64FF00", "#FF6400", "#00FF64", "#6400FF"];
    public function nextColor() : string {
        $result = next($colors);
        // if end of array reached
        if (key($colors) === null) {
            reset($colors);
        }
        return $result;
    }
}
        Korzystanie z foreach
Pętla bezpośrednia
foreach ($colors as $color) {
    echo "I am the color $color<br>";
}
 Pętla z kluczami
$foods = ['healthy' => 'Apples', 'bad' => 'Ice Cream'];
foreach ($foods as $key => $food) {
    echo "Eating $food is $key";
}
 Pętla przez odniesienie
 W pętlach foreach w powyższych przykładach modyfikowanie wartości ( $color lub $food ) bezpośrednio nie zmienia jej wartości w tablicy. Operator & jest wymagany, aby wartość była wskaźnikiem odniesienia do elementu w tablicy. 
$years = [2001, 2002, 3, 4];
foreach ($years as &$year) {
    if ($year < 2000) $year += 2000;
}
 Jest to podobne do:
$years = [2001, 2002, 3, 4];
for($i = 0; $i < count($years); $i++) { // these two lines
    $year = &$years[$i];                // are changed to foreach by reference
    if($year < 2000) $year += 2000;
}
 Konkurencja
 Tablice PHP mogą być modyfikowane w dowolny sposób podczas iteracji bez problemów z współbieżnością (w przeciwieństwie do np. List Java). Jeśli tablica jest iterowana przez odwołanie, na późniejsze iteracje będą miały wpływ zmiany w tablicy. W przeciwnym razie zmiany w tablicy nie wpłyną na późniejsze iteracje (tak jak w przypadku iteracji kopii tablicy). Porównaj zapętlenie według wartości: 
$array = [0 => 1, 2 => 3, 4 => 5, 6 => 7];
foreach ($array as $key => $value) {
    if ($key === 0) {
        $array[6] = 17;
        unset($array[4]);
    }
    echo "$key => $value\n";
}
 Wynik:
0 => 1
2 => 3
4 => 5
6 => 7
 Ale jeśli tablica jest iterowana w odniesieniu do,
$array = [0 => 1, 2 => 3, 4 => 5, 6 => 7];
foreach ($array as $key => &$value) {
    if ($key === 0) {
        $array[6] = 17;
        unset($array[4]);
    }
    echo "$key => $value\n";
}
 Wynik:
0 => 1
2 => 3
6 => 17
  Zestaw klucz-wartość 4 => 5 nie jest już iterowany, a 6 => 7 zmienia się na 6 => 17 . 
Korzystanie z ArrayObject Iterator
Phiter arrayiterator pozwala modyfikować i usuwać wartości podczas iteracji po tablicach i obiektach.
Przykład:
$array = ['1' => 'apple', '2' => 'banana', '3' => 'cherry'];
$arrayObject = new ArrayObject($array);
$iterator = $arrayObject->getIterator();
for($iterator; $iterator->valid(); $iterator->next()) {
    echo $iterator->key() . ' => ' . $iterator->current() . "</br>";
}
 Wynik:
1 => apple
2 => banana
3 => cherry