CZĘŚĆ 08
Tablice: indeksowane i asocjacyjne
PPrezentacja dla nauczyciela
Tablica to kontener przechowujący wiele wartości pod jedną nazwą. Od prostych list z numerami 0..N, przez pętlę foreach, aż po tablice asocjacyjne ze słownymi kluczami (podstawa rekordów z bazy danych).
Tablice indeksowane
Tablica przechowuje wiele wartości pod jedną nazwą. W tablicy indeksowanej kluczami są kolejne liczby od zera: $oceny = [5, 4, 3];, więc $oceny[0] to 5.
Elementy dodajemy przez $tab[] = 'nowy'; — PHP sam nada kolejny numer. Do policzenia elementów służy count(), a do sprawdzenia ostatniego indeksu count($tab) - 1.
Tablicę można zbudować pętlą, np. z wyników losowania. Wtedy nie trzeba z góry wiedzieć, ile będzie elementów.
$oceny = [5, 4, 3];
$oceny[] = 6;
echo 'Elementow: ' . count($oceny);
echo '<p>Pierwsza ocena: ' . $oceny[0] . '</p>';
echo '<p>Ostatnia ocena: ' . $oceny[count($oceny) - 1] . '</p>';
Tablice asocjacyjne
W tablicy asocjacyjnej kluczem jest nazwa, a nie liczba: $uczen = ['imie' => 'Ola', 'klasa' => '3TI'];. Odczyt wygląda jak przy tablicy indeksowanej, tylko w nawiasach podajemy klucz tekstowy.
Do sprawdzenia, czy klucz istnieje, służy array_key_exists(), a do wartości domyślnej operator ??. Uwaga: isset() zwraca fałsz także wtedy, gdy wartość jest null.
Tablice asocjacyjne świetnie opisują rekord: jeden wiersz z bazy, konfigurację aplikacji albo dane formularza.
$uczen = [
'imie' => 'Ola',
'klasa' => '3TI',
'punkty' => 18,
];
echo $uczen['imie'] . ' z klasy ' . $uczen['klasa'];
echo '<p>Punkty: ' . $uczen['punkty'] . '</p>';
echo '<p>Email: ' . ($uczen['email'] ?? 'brak') . '</p>';
Iteracja i funkcje tablicowe
foreach przechodzi po tablicy i podstawia kolejne wartości. W wersji foreach ($tab as $klucz => $wartosc) otrzymujemy też klucze — to najwygodniejszy sposób wypisania tablicy asocjacyjnej.
Do porządkowania służą sort() (wartości), ksort() (klucze) i rsort() (malejąco). Funkcje array_sum(), max() i min() liczą statystyki bez pętli.
Do łączenia tekstu z tablicy służy implode(', ', $tab), a do rozbijania tekstu explode(). Para tych funkcji często pojawia się w zadaniach egzaminacyjnych.
$punkty = ['Ola' => 18, 'Jan' => 12, 'Ewa' => 20];
foreach ($punkty as $imie => $ile) {
echo '<p>' . $imie . ': ' . $ile . '</p>';
}
echo '<p>Suma: ' . array_sum($punkty) . '</p>';
echo '<p>Najlepszy: ' . max($punkty) . '</p>';
echo '<p>Lista: ' . implode(', ', array_keys($punkty)) . '</p>';
Ćwiczenia
- 1Pierwsza tablica i odczyt po indeksiepierwsza tablica i indeks 0Zadanie i podpowiedzi →
- 2Pierwszy i ostatni element tablicypierwszy i ostatni elementZadanie i podpowiedzi →
- 3Dopisz nowy elementdopisanie elementu do tablicyZadanie i podpowiedzi →
- 4Zmień element tablicyzmiana wartości pod indeksemZadanie i podpowiedzi →
- 5Policz elementycount() na tablicyZadanie i podpowiedzi →
- 6Lista ocen pętlą foreachlista ocen pętlą foreachZadanie i podpowiedzi →
- 7Sumowanie elementów tablicy pętlą foreachsuma elementów w foreachZadanie i podpowiedzi →
- 8Podsumowanie ocen: min, max, średniamin, max i średnia tablicyZadanie i podpowiedzi →
- 9Sprawdzenie roli w tablicysprawdzenie zawartości tablicyZadanie i podpowiedzi →
- 10Klucze i wartościklucze i wartości tablicyZadanie i podpowiedzi →
- 11Wiersz tabeli z tablicy asocjacyjnejwiersz tabeli z tablicy asocjacyjnejZadanie i podpowiedzi →
- 12Wypisz też kluczforeach z kluczemZadanie i podpowiedzi →
- 13Łączenie tagów w napisłączenie elementów implode()Zadanie i podpowiedzi →
- 14Podział tekstu na tablicę (explode)podział daty przez explodeZadanie i podpowiedzi →
- 15Połącz dwie listyarray_merge dwóch listZadanie i podpowiedzi →
- 16Filtrowanie produktów po frazie (stripos)filtrowanie tablicy po frazieZadanie i podpowiedzi →