PHPDevs

Projekt obiektowy z Composerem i Twigiem? Czytaj!

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 ilości 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 (lub - w przypadku tablicy asocjacyjnej - klucza) dla każdego elementu.

<?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ła by 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 nie znamy, istnieją funkcję do zliczenia ich ilości (count()). Tylko... po co tak robić, skoro mamy do tego celu dedykowaną pętlę? 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
  • Google+

Komentarze