W budowie
Materiał edukacyjny · Informatyka

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>';
1. Od jakiego indeksu zaczyna się tablica?
2. Co robi count($tab)?
3. Co robi zapis $tab[] = 6?

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>';
4. Czym jest klucz w tablicy asocjacyjnej?
5. Co robi array_key_exists()?
6. Co daje operator ?? przy kluczu?

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>';
7. Co daje foreach z kluczem?
8. Co robi implode()?
9. Co zwraca array_sum()?

Ćwiczenia