PHP 8 i 8.1 - sprawdź co nowego!

Struktury kontrolne > Lekcja 7

Przeglądanie tablic - pętla foreach

Foreach jest nieco inną pętlą od pozostałych. Służy do operacji na tablicach. Dokładniej mówiąc, możemy dzięki niej łatwo przeglądać kolejne elementy tablicy.

Podstawowy zapis tej pętli wygląda następująco:

<?php
foreach ($tablica as $element) {
    // instrukcje do wykonania na każdym elemencie tablicy
}

Za każdym przejściem tablicy, pobierany jest jej kolejny element i przypisywany do zmiennej $element. Może to być kolejna tablica, obiekt czy pojedyncza wartość, bez znaczenia. foreach automatycznie kończy się, gdy „przejrzy” całą tablicę.

Jak możemy w praktyce użyć tej pętli? Posłużę się tu przykładem z lekcji wprowadzającej zagadnienie tablicy. Załóżmy, że mamy w tablicy listę imion uczestników wycieczki i potrzebujemy wyświetlić wszystkie. Zrobimy to tak:

<?php
$people = ['Jan', 'Piotr', 'Adrian', 'Marek', 'Adam'];
foreach ($people as $person) {
    echo $person . ', ';
}
// result: Jan, Piotr, Adrian, Marek, Adam,

Bez użycia pętli musielibyśmy ręcznie wypisać wyświetlenie wszystkich elementów. A gdyby zdarzyło się, że tablica nie ma dokładnie określonej liczby elementów, to już w ogóle byłby problem.

<?php
$people = ['Jan', 'Piotr', 'Adrian', 'Marek', 'Adam'];
echo $people[0];
echo $people[1];
// ...
echo $people[4];

Istnieje także możliwość odczytania indeksu/klucza dla każdego elementu poprzez dodanie =>.

<?php
$person = [
    'name' => 'Jan',
    'age' => 26,
    'address' => 'Kwiatowa 1',
    'email' => 'jan@example.com'
];
foreach ($person as $data => $value) {
    echo $data . ': ' . $value . ', ';
}
// result: name: Jan, age: 26, address: Kwiatowa 1, email: jan@example.com,

Pewnie kojarzysz już zapis z użyciem => z deklaracji tablic.

Tablice i inne pętle?

Teoretycznie do operacji na tablicach możemy też użyć innej pętli, na przykład poznanej już for. Mogłoby to być coś w stylu (zakładając, że znamy liczbę elementów tablicy):

<?php
$people = ['Jan', 'Piotr', 'Adrian', 'Marek', 'Adam'];
for ($number = 0; $number < 5; $number++) {
    echo $people[$number] . ', ';
}
// result: Jan, Piotr, Adrian, Marek, Adam,

Przypomnienie

Mam nadzieję, że taki warunek w pętli Cię nie zdziwił. Zapis $number <= 5 byłby błędny, gdyż pętla wykonałaby się 6 razy, a elementów w tablicy mamy 5. Przypominam więc, że indeksy w tablicach liczymy od zera.

A jeśli chciałbyś zapisać $number <= 4, to oczywiście byłoby poprawnie :)

Jeśli liczby elementów nie znamy, istnieją funkcję do zliczenia tego jak count(). Tylko… po co tak robić, skoro mamy do tego celu dedykowaną pętlę? Tam gdzie pasuje, używajmy więc foreach do przeglądania tablic.

Ćwiczenia

  1. W tablicy $people podane są dane trzech uczniów: imię i nazwisko oraz rok urodzenia. Wypisz imiona i nazwiska wszystkich uczniów oraz ich łączny wiek. Skorzystaj z pętli foreach. Uwaga! Wiek, czyli informacja ile mają aktualnie lat. Informacji tej nie ma w tablicy, należy ją obliczyć.
    <?php
    $people = [
        ['name' => 'Jan Kowalski', 'birth' => 1980],
        ['name' => 'Piotr Nowak', 'birth' => 1994],
        ['name' => 'Anna Kowalczyk', 'birth' => 1982]
    ];
    $currentYear = 2017;
    // your code here
    
    Przykładowe rozwiązanie
Poprzednia lekcja Następna lekcja

Udostępnij

  • Facebook
  • Twitter

Komentarze