Struktury kontrolne > Lekcja 7
Przeglądanie tablic - pętla foreach
Ostatnia modyfikacja: 01.06.2021
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
- 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ć.
Przykładowe rozwiązanie<?php $people = [ ['name' => 'Jan Kowalski', 'birth' => 1980], ['name' => 'Piotr Nowak', 'birth' => 1994], ['name' => 'Anna Kowalczyk', 'birth' => 1982] ]; $currentYear = 2017; // your code here
Komentarze