Tablice wielowymiarowe PHP -- tworzenie, zastosowania

Tablice wielowymiarowe PHP to struktury danych, które są tablicami zawierającymi jako elementy inne tablice. W PHP można tworzyć tablice dwuwymiarowe, trójwymiarowe itd., chociaż w praktycznym użyciu spotyka się raczej maksymalnie tablice trójwymiarowe. Przy większej liczbie wymiarów zaczyna boleć głowa od myślenia…

W tym rozdziale między innymi nauczysz się tworzyć tablice wielowymiarowe PHP, poznasz najczęściej używane funkcje do pracy z nimi, dowiesz się, jakie mają cechy, jak uzyskiwać dostęp do ich elementów, jak dodawać i usuwać w nich elementy i wiele więcej.

Oto niektóre z pytań, na które odpowiedzi znajdziesz na tej stronie:

  • Do czego można używać tablic wielowymiarowych w PHP?
  • Jak utworzyć tablicę wielowymiarową w PHP?
  • Jak wydrukować zawartość tablicy wielowymiarowej na stronie?
  • Jak uzyskiwać dostęp do elementów tablic wielowymiarowych?
  • Jak przeszukiwać tablice wielowymiarowe?
  • Jak pracować z tablicami wielowymiarowymi za pomocą pętli PHP foreach?

Zacznę od przedstawienia paru sytuacji, w których mogą się przydać tablice zawierające więcej niż jeden wymiar.

Tablice wielowymiarowe PHP — zastosowania

Kiedy mówi się o tablicach wielowymiarowych, to tak naprawdę najczęściej ma się na myśli tablice dwuwymiarowe i tablice trójwymiarowe.

Struktury o większej liczbie wymiarów w praktycznym użyciu są rzadkością. Do czego więc używa się tablic dwuwymiarowych? Lista ich zastosowań jest bardzo długa, ponieważ ten typ struktury danych idealnie odpowiada wielu rodzajom informacji.

Tablic dwuwymiarowych używa się do przechowywania wszelkiego rodzaju informacji o strukturze tabeli, ponieważ w istocie można o nich powiedzieć, że są abstrakcyjną reprezentacją tego modelu reprezentacji danych.

Przykładowo, w tablicy dwuwymiarowej moglibyśmy zapisać dane użytkowników systemu, np.:

Tablica dwuwymiarowa jest wręcz stworzona do przechowywania zawartości takich tabel.
Imię Nazwisko Maska uprawnień
Mieczysław Kowalski 1111
Brygida Nowak 0111
Marcin Kwiatkowski 0001

Ponadto tablice dwuwymiarowe PHP mogą być używane do przechowywania danych do kreślenia wykresów, do przechowywania danych w grach, do reprezentowania macierzy w obliczeniach matematycznych czy w przetwarzaniu grafiki (zresztą też często z wykorzystaniem macierzy).

A do czego mogą służyć tablice trójwymiarowe? Najprościej mówiąc są one tablicami tablic dwuwymiarowych.

Weźmy na przykład powyższą tabelę. Zawiera ona dane użytkowników systemu o różnym poziomie uprawnień. Mieczysław jest administratorem, Brygida jest redaktorką, a Marcin jest subskrybentem. Gdyby w naszym systemie było po kilka osób z każdej z tych grup, to dla każdej z nich utworzylibyśmy osobną tabelę, np.:

Administratorzy
Mieczysław Kowalski 1111
Anna Sobieska 1111
Stefan Zawadzki 1111
Redaktorzy
Marlena Wiśniewska 0111
Lidia Adamczuk 0111
Alan Baranowski 0111
Subskrybenci
Zenon Rogoziński 0001
Julia Grodzka 0001
Zuzanna Radomska 0001

Tablica trójwymiarowa byłaby tablicą zawierającą te trzy tablice dwuwymiarowe. Być może poniższa ilustracja pomoże ci to sobie wyobrazić.

tablice trójwymiarowe php, tablice wielowymiarowe php
Tabele (tablice dwuwymiarowe) składające się na tablicę trójwymiarową

Oprócz tego tablice trójwymiarowe PHP mogą być używane w obliczeniach na macierzach trójwymiarowych, do przetwarzania grafiki albo do przechowywania danych z bardziej rozbudowanych formularzy internetowych.

No dobrze, to jak w takim razie tworzy się te dwu- i trójwymiarowe tablice w PHP? Zobaczmy.

Tworzenie tablic wielowymiarowych w PHP

Jak już wiesz, element tablicy PHP może zawierać inną tablicę. Aby więc utworzyć tablicę wielowymiarową, należy zdefiniować tablicę tablic. Jeśli ma to być tablica dwuwymiarowa, to należy utworzyć tablicę, której każdy element zawiera inną tablicę, np.:


$admins = [
  ["Mieczysław", "Kowalski", 1111],
  ["Brygida", "Nowak", 1111],
  ["Marcin", "Kwiatkowski", 1111],
];

W tym przykładzie utworzyłem tablicę o nazwie $admins, która zawiera trzy elementy, również będące tablicami. Jest to więc tablica dwuwymiarowa, która stanowi reprezentację przykładowej tabeli z początku tej strony.

Gdybyśmy chcieli utworzyć tablicę trójwymiarową, której schemat również został pokazany wcześniej, to moglibyśmy utworzyć jeszcze „szerszą” tablicę, zawierającą kilka tablic podobnych do powyższej, np.:


$users = [
  "admins" =>       [
                     ["Mieczysław", "Kowalski", 1111],
                     ["Brygida", "Nowak", 1111],
                     ["Marcin", "Kwiatkowski", 1111],
                    ],
  "editors" =>      [
                     ["Marlena", "Wiśniewska", 0111],
                     ["Lidia", "Adamczuk", 0111],
                     ["Alan", "Baranowski", 0111],
                    ],
  "subscribers" =>  [
                     ["Zenon", "Rogoziński", 0001],
                     ["Julia", "Grodzka", 0001],
                     ["Zuzanna", "Radomska", 0001],
                    ],
];

Tutaj mamy tablicę trójwymiarową o nazwie $users. Zawiera ona trzy elementy, tablice o kluczach admins, editors i subscribers, z których każda również zawiera po trzy tablice. W efekcie mamy trzy wymiary.

Aby szybko sprawdzić zawartość tablicy (o dowolnej liczbie wymiarów), można użyć funkcji PHP print_r(), np.:


print_r($users);

Wynik:

Array
(
    [admins] => Array
        (
            [0] => Array
                (
                    [0] => Mieczysław
                    [1] => Kowalski
                    [2] => 1111
                )

            [1] => Array
                (
                    [0] => Brygida
                    [1] => Nowak
                    [2] => 1111
                )

            [2] => Array
                (
                    [0] => Marcin
                    [1] => Kwiatkowski
                    [2] => 1111
                )

        )

    [editors] => Array
        (
            [0] => Array
                (
                    [0] => Marlena
                    [1] => Wiśniewska
                    [2] => 73
                )

            [1] => Array
                (
                    [0] => Lidia
                    [1] => Adamczuk
                    [2] => 73
                )

            [2] => Array
                (
                    [0] => Alan
                    [1] => Baranowski
                    [2] => 73
                )

        )

    [subscribers] => Array
        (
            [0] => Array
                (
                    [0] => Zenon
                    [1] => Rogoziński
                    [2] => 1
                )

            [1] => Array
                (
                    [0] => Julia
                    [1] => Grodzka
                    [2] => 1
                )

            [2] => Array
                (
                    [0] => Zuzanna
                    [1] => Radomska
                    [2] => 1
                )

        )

)

Kiedy utworzysz tablicę wielowymiarową, to z pewnością chcesz mieć możliwość uzyskiwania dostępu do jej elementów. To bardzo proste, ale nie musisz mi wierzyć na słowo, tylko sprawdź poniżej.

Dostęp do elementów tablic wielowymiarowych

Aby uzyskać dostęp do elementu tablicy jednowymiarowej, należy podać jego klucz lub indeks. Natomiast w przypadku tablic wielowymiarowych należy podać tyle kluczy lub indeksów, ile jest wymiarów. Aby na przykład odnieść się do któregokolwiek elementu tablicy dwuwymiarowej, należy podać dwa klucze lub indeksy albo ich mieszankę.

Spójrz na poniższy schematyczny rysunek przedstawiający dwuwymiarową tablicę $admins:

tablice dwuwymiarowe php, schemat tablicy dwuwymiarowej w php
Dwuwymiarowa tablica PHP z zaznaczonymi indeksami elementów

Na schemacie tym zaznaczyłem indeksy wszystkich elementów. Odnoszenie się do elementów tablicy dwuwymiarowej jest jak popularna gra w statki albo zaznaczanie punktów w układzie współrzędnych — aby wskazać wybrany punkt, należy podać numer wiersza, a następnie numer kolumny.

Aby więc na przykład wyświetlić na stronie nazwisko pierwszego administratora (Kowalski), wskazalibyśmy pierwszy wiersz i drugą kolumnę:


echo $admins[0][1]; // Wynik: Kowalski

A gdybyśmy chcieli wyświetlić maskę bitową reprezentującą poziom uprawnień trzeciego administratora, napisalibyśmy taką instrukcję:


echo $admins[2][2];

Podsumowując, dostęp do elementu tablicy wielowymiarowej uzyskuje się przez podanie jego „współrzędnych” w nawiasach kwadratowych.

Jak więc wygląda to w przypadku tablic trójwymiarowych? Należy podać trzy klucze lub indeksy albo ich mieszankę. Spójrz na poniższy schemat.

tablice trójwymiarowe php, dostęp do elementów tablic trójwymiarowych w php
Rozmieszczenie elementów w tablicy trójwymiarowej PHP

Jest to schemat trójwymiarowej tablicy $users. Zawiera ona trzy tablice dwuwymiarowe, każda przechowywana pod innym kluczem (równie dobrze mogłyby być to indeksy). Aby odnieść się do wybranego elementu, należy podać trzy „współrzędne” określające jego położenie, np.:


echo $users["admins"][1][0];

Najpierw wskazujemy miejsce w pierwszym wymiarze. W naszym przypadku elementy pierwszego wymiaru mają klucze nie indeksy numeryczne. To oznacza, że odnosimy się do zawartości tablicy admins.

Następny jest indeks 1, a więc interesuje nas drugi element (wiersz) tablicy admins. Ostatni jest indeks 0, co oznacza, że interesuje nas pierwszy element w tym drugim wierszu, a więc na ekranie pojawi się imię Anna.

Analogicznie możemy wybrać każdy inny element tej tablicy, np.:


echo $users["admins"][2][1]; // Wynik: Kwiatkowski
echo $users["editors"][1][2]; // Wynik: 73 (nie, to nie błąd)
echo $users["subscribers"][0][2]; // Wynik: 1
echo $users["editors"][2][0]; // Wynik: Alan

Modyfikowanie elementów tablic wielowymiarowych

Modyfikowanie elementów tablic wielowymiarowych w PHP to bardzo prosta operacja, która jest bardzo podobna do operacji dostępu, tylko zakończona przypisaniem.

Aby na przykład zmienić imię trzeciego redaktora w naszej tablicy trójwymiarowej $users, należy odwołać się do zawierającego je elementu tablicy, po czym przypisać inne:


echo $users["editors"][2][0] = "Grzegorz";

W analogiczny sposób można zmienić dowolny inny element tablicy o każdej liczbie wymiarów.

Teraz przejdziemy do dodawania elementów do tablic wielowymiarowych.

Dodawanie elementów do tablic wielowymiarowych

Elementy do tablic wielowymiarowych można dodawać w różnych miejscach, na dowolnej pozycji w dowolnym wymiarze. Składnia jest podobna do składni dostępu do elementów w tablicach jednowymiarowych, tylko obejmuje składniki odnoszące się do większej liczby wymiarów.

Można powiedzieć, że ścieżki do interesujących nas miejsc są w tablicach wielowymiarowych dłuższe niż w jednowymiarowych. I to praktycznie wszystkie różnice. Najpierw pokażę ci, jak dodawać elementy na końcu tablicy wielowymiarowej.

Dodawanie elementów na końcu tablicy wielowymiarowej

Gdybyśmy na przykład chcieli dodać na końcu tablicy $users nowego subskrybenta, to zastosowalibyśmy następującą składnię:


$users["subscribers"][] = ["Grzegorz", "Zawadzki", 0001];

Teraz zawartość tej tablicy wyglądałaby tak:

[subscribers] => Array
        (
            [0] => Array
                (
                    [0] => Zenon
                    [1] => Rogoziński
                    [2] => 1
                )

            [1] => Array
                (
                    [0] => Julia
                    [1] => Grodzka
                    [2] => 1
                )

            [2] => Array
                (
                    [0] => Zuzanna
                    [1] => Radomska
                    [2] => 1
                )

            [3] => Array
                (
                    [0] => Grzegorz
                    [1] => Zawadzki
                    [2] => 1
                )

        )

Operator [] w powyższej instrukcji oznacza, że chcemy dodać nowy element na końcu wskazanej tablicy (wskazanego wymiaru tablicy). W tym przypadku wskazałem, że chcę dodać nowy element na końcu wymiaru subscribers.

Elementy na końcu wymiaru tablicy wielowymiarowej można dodawać także za pomocą funkcji PHP array_push()
.

A gdybyśmy chcieli dodać element w dowolnym innym miejscu (tzn. nie na końcu)? Zobaczmy.

Dodawanie elementów w środku tablicy wielowymiarowej

Powiedzmy na przykład, że postanowiliśmy dodać do naszych danych nowe pole — miasto zamieszkania danej osoby, które powinno znajdować się po nazwisku, czyli na trzecim miejscu w „najbardziej wewnętrznej” tablicy.

W takim przypadku możemy posłużyć się funkcją PHP array_splice(), której należy po kolei przekazać tablicę do modyfikacji, numer indeksu, pod którym chcemy wstawić nowy element, wartość 0 oznaczającą, że nie chcemy nic usuwać, oraz wartość do wstawienia we wskazanym miejscu, np.:


array_splice($users["admins"][0], 2, 0, "Warszawa");

Teraz interesujący nas fragment wymiaru administratorów będzie wyglądać tak:

[admins] => Array
        (
            [0] => Array
                (
                    [0] => Mieczysław
                    [1] => Kowalski
                    [2] => Warszawa
                    [3] => 1111
                )

Pozostało nam jeszcze dowiedzieć się, jak dodawać elementy na początku tablicy wielowymiarowej. Niczym cię tu nie zaskoczę, to również bardzo prosta operacja, niewiele różniąca się od analogicznej operacji na tablicach jednowymiarowych.

Dodawanie elementów na początku tablicy wielowymiarowej

Aby dodać element na początku tablicy wielowymiarowej, lub dokładniej na początku wybranego wymiaru tablicy wielowymiarowej, można użyć funkcji array_unshift.

Funkcja ta przyjmuje tablicę do zmodyfikowania jako pierwszy argument i listę zawierającą dowolną liczbę rozdzielanych przecinkami wartości do wstawienia na początku tej tablicy.

Aby na przykład dodać nowego subskrybenta na początku wymiaru subskrybentów, moglibyśmy napisać taki kod:


array_unshift($users["subscribers"], ["Grzegorz", "Zawadzki", 0001]);

W tym przypadku do tablicy subskrybentów dodałem tablicę reprezentującą nowego subskrybenta. Jest to równoznaczne z poniższym kodem:

"subscribers" =>  [
                   ["Grzegorz", "Zawadzki", 0001],
                   ["Zenon", "Rogoziński", 0001],
                   ["Julia", "Grodzka", 0001],
                   ["Zuzanna", "Radomska", 0001],
                  ],

Skoro umiesz już dodawać elementy do tablic wielowymiarowych na różne sposoby, to teraz przyjrzymy się sposobom ich usuwania.

Usuwanie elementów z tablic wielowymiarowych

Jak już się pewnie domyślasz, usuwanie elementów z tablic wielowymiarowych to żadna wielka filozofia, jeśli ktoś wie, jak wykonywać te działania na tablicach jednowymiarowych.

Jeśli jeszcze nie opanowałeś metod pracy z tablicami jednowymiarowymi, przeczytaj rozdział Tablice PHP — podstawy. A jeśli już masz to wszystko opanowane, to usuwanie elementów z tablic wielowymiarowych nie sprawi Ci żadnego problemu.

Aby się niepotrzebnie nie powtarzać, przypomnę że praca z tablicami wielowymiarowymi wygląda prawie tak samo, jak z jednowymiarowymi, tylko zamiast zmiennej reprezentującej tablicę jednowymiarową w operacjach wykorzystuje się odwołanie do wybranego wymiaru, będącego tablicą.

Aby więc usunąć jeden dowolny element z tablicy wielowymiarowej, można użyć funkcji unset(). Powiedzmy na przykład, że z naszej tablicy użytkowników systemu chcemy usunąć jednego z administratorów. Możemy to zrobić tak:


unset($users["admins"][0]);

Ta instrukcja nakazuje usunąć z tablicy $users z wymiaru admins pierwszy element, czyli pana Mieczysława Kowalskiego. Po tej operacji wymiar admins ma następującą zawartość:

[admins] => Array
        (
            [1] => Array
                (
                    [0] => Anna
                    [1] => Sobieska
                    [2] => 1111
                )

            [2] => Array
                (
                    [0] => Marcin
                    [1] => Kwiatkowski
                    [2] => 1111
                )

        )

Do usunięcia kilku kolejnych elementów na raz można użyć funkcji array_splice(), natomiast do wygodnego usuwania pierwszego i ostatniego elementu służą odpowiednio funkcje array_shift() i array_pop(). Sposób ich użycia jest opisany na indywidualnych poświęconych im stronach oraz w rozdziale Tablice PHP — podstawy.

Przeglądanie tablic wielowymiarowych za pomocą pętli

Najwygodniejszym sposobem na przeglądanie tablic za pomocą pętli jest użycie zagnieżdżonych pętli foreach. Liczba poziomów zagnieżdżenia jest zależna od liczby wymiarów tablicy. Zaczniemy od najprostszego możliwego przypadku, czyli przeglądania tablicy dwuwymiarowej.

Weźmy na przykład pokazaną wcześniej tablicę dwuwymiarową administratorów systemu. Poniżej dla wygody przedstawiam ją jeszcze raz:


$admins = [
  ["Mieczysław", "Kowalski", 1111],
  ["Brygida", "Nowak", 1111],
  ["Marcin", "Kwiatkowski", 1111],
];

Powiedzmy, że zawartość tej tablicy chcemy wyświetlić na stronie w formie tabeli. Możemy to zrobić za pomocą poniższej mieszanki kodu HTML i PHP z wykorzystaniem pętli PHP foreach:


<table>
<tr>
  <th>Imię</th>
  <th>Nazwisko</th>
  <th>Uprawnienia</th>
</tr>
<?php
foreach ($admins as $admin) {
  echo "<tr>";
	foreach ($admin as $admin_field) {
		echo "<td>" . $admin_field . '</td>';
	}
  echo "</tr>";
}
?>
</table>

Przyjrzymy się dokładnie temu skryptowi:

  1. Najpierw otworzyłem tabelę HTML i zdefiniowałem wiersz nagłówkowy (zobacz Element HTML th), który opisuje zawartość pozostałych wierszy.
  2. Następnie, za pomocą pierwszej pętli foreach, pobieram po kolei elementy tablicy $admins (wiersz 8), czyli jednowymiarowe tablice zawierające dane poszczególnych administratorów.
  3. Dla każdego pobranego elementu tablicy $admins otwieram wiersz (element HTML tr) w tabeli HTML (wiersz 9).
  4. Potem, w zagnieżdżonej pętli foreach, pobieram po kolei elementy z drugiego wymiaru tablicy administratorów (imię, nazwisko i binarną maskę uprawnień — wiersz 10) i każdy z nich wstawiam do elementu HTML td (wiersz 11). Inaczej mówiąc, dla każdej pozycji danych każdego administratora tworzę komórkę w wierszu tabeli.
  5. Po wyjściu z wewnętrznej pętli foreach z powrotem znajduję się w pętli nadrzędnej, w której zamykam wiersz tabeli. To znaczy, że dla każdego elementu tablicy $admins tworzę osobny wiersz tabeli, zawierający dane jednego administratora.

W efekcie działania tego kodu zostaje wygenerowana następująca tabela HTML:


<table>
  <tr>
    <th>Imię</th>
    <th>Nazwisko</th>
    <th>Uprawnienia</th>
  </tr>
  <tr>
    <td>Mieczysław</td>
    <td>Kowalski</td>
    <td>1111</td>
  </tr>
  <tr>
    <td>Brygida</td>
    <td>Nowak</td>
    <td>1111</td>
  </tr>
  <tr>
    <td>Marcin</td>
    <td>Kwiatkowski</td>
    <td>1111</td>
  </tr>
</table>

Teraz wystarczy dodać parę arkuszy stylów CSS, aby nadać jej atrakcyjny wygląd i gotowe.

Praca z tablicami trójwymiarowymi wygląda podobnie, ale wymaga zastosowania dodatkowego poziomu zagnieżdżenia pętli. Na końcu znajduje się ćwiczenie dotyczące iteracji przez taką tablicę. Zachęcam do jego wykonania i sprawdzenia poprawnej odpowiedzi.

Teraz przyjrzymy się metodom sortowania tablic wielowymiarowych.

Sortowanie tablic wielowymiarowych

Tablice wielowymiarowe, podobnie jak jednowymiarowe, można sortować między innymi za pomocą funkcji usort(), uasort() albo uksort() (i jeszcze paru innych — zobacz Wszystkie funkcje tablicowe PHP). W tym przypadku po raz kolejny wszystko sprowadza się tak naprawdę do wybrania określonego wymiaru tablicy i wykonania operacji na nim, jakby był tablicą jednowymiarową.

Na przykład, tablicę użytkowników systemu możemy posortować na kilka różnych sposobów — według nazwy grupy użytkowników (admins, editors i subscribers) albo bardziej wewnętrznie, czyli według nazwiska lub imienia użytkownika w obrębie konkretnej grupy itd.

Powiedzmy, że chcemy posortować naszą tablicę użytkowników alfabetycznie według nazwy grupy w odwrotnej kolejności: subscribers, editors i admins. Do tego celu można użyć funkcji PHP uksort(), która umożliwia sortowanie tablicy według kluczy za pomocą funkcji zwrotnej. Oto kod tej funkcji:


uksort($users, fn($a, $b) => $b <=> $a);

Jak widać, nic skomplikowanego tu nie ma. Jeśli nie rozumiesz czegoś w części fn($a, $b) => $b <=> $a, to przeczytaj, czym są funkcje zwrotne PHP, funkcje strzałkowe PHP oraz operator statek kosmiczny.

W tym przykładzie sortujemy tablicę według pierwszego wymiaru. A czy wiesz, jak posortować na przykład poszczególne tablice użytkowników wg nazwiska? Pozostawiam to jako ćwiczenie do samodzielnego wykonania.

Na zakończenie tego rozdziału pokażę ci jeszcze ciekawą „sztuczkę”, która umożliwia zamianę w zmienne wszystkich elementów tablicy w pętli foreach. Warto ją znać.

Destrukturyzacja tablic w pętli foreach

Podczas pracy z tablicami dwuwymiarowymi w PHP można korzystać ze specjalnej składni, która umożliwia zapisanie wszystkich elementów zagnieżdżonej tablicy w zmiennych pętlowych.

Składnia ta występuje w dwóch równoważnych wersjach: z użyciem operatora [] i z użyciem konstrukcji językowej PHP list().

Weźmy na przykład tablicę redaktorów z naszych wcześniejszych przykładów:


$editors = [
  ["Marlena", "Wiśniewska", 0111],
  ["Lidia", "Adamczuk", 0111],
  ["Alan", "Baranowski", 0111],
];

Tablicę tę możemy poddać destrukturyzacji w pętli foreach w następujący sposób:


foreach($editors as [$imie, $nazwisko, $maska]) {
  echo "Imię: $imie<br>";
  echo "Nazwisko: $nazwisko<br>";
  echo "Maska: $maska<br><br>";
}

Lub przy użyciu konstrukcji językowej PHP list():


foreach($editors as list($imie, $nazwisko, $maska)) {
  echo "Imię: $imie<br>";
  echo "Nazwisko: $nazwisko<br>";
  echo "Maska: $maska<br><br>";
}

Wynik:

Imię: Marlena
Nazwisko: Wiśniewska
Maska: 73

Imię: Lidia
Nazwisko: Adamczuk
Maska: 73

Imię: Alan
Nazwisko: Baranowski
Maska: 73

Podsumowanie

blank
  1. Tablica wielowymiarowa PHP to tablica, zawierająca jako elementy inne tablice.
  2. Tablica dwuwymiarowa to tablica tablic jednowymiarowych.
  3. Tablica trójwymiarowa to tablica tablic dwuwymiarowych.
  4. W praktycznym użyciu najczęściej spotyka się tablice jedno-, dwu- i trójwymiarowe.
  5. Dostęp do elementów tablic wielowymiarowych uzyskuje się za pomocą indeksów lub kluczy, których liczba odpowiada liczbie wymiarów.
  6. Operacje takie jak dodawanie, usuwanie i modyfikowanie elementów tablic wielowymiarowych wykonuje się bardzo podobnie jak w tablicach jednowymiarowych, tylko należy podać większą liczbę indeksów lub kluczy.
  7. Tablice wielowymiarowe można sortować za pomocą różnych funkcji, takich jak między innymi usort(), uasort() i uksort().
  8. Tablice dwuwymiarowe można destrukturyzować, czyli można zapisywać wszystkie ich wartości w zmiennych pętlowych pętli foreach.
  9. Destrukturyzację tablic można wykonywać za pomocą operatora [] lub konstrukcji językowej list().


blank

Pytania

  1. Czym jest tablica wielowymiarowa PHP?
  2. Z czego składa się tablica dwuwymiarowa?
  3. Z czego składa się tablica trójwymiarowa?
  4. Do jakich celów najczęściej są używane tablice wielowymiarowe PHP?
  5. Jak uzyskuje się dostęp do elementów tablic wielowymiarowych?
  6. Czym różnią się operacje dodawania, usuwania i modyfikowania elementów tablic wielowymiarowych od analogicznych operacji na tablicach jednowymiarowych?
  7. Jakie znasz funkcje sortowania tablic?
  8. Na czym polega destrukturyzacja tablica w pętli foreach? Jaka jest składnia tej operacji?


blank

Ćwiczenia

  1. Za pomocą pętli foreach wygeneruj z tablicy $users taką tabelę HTML, jak na poniższym zrzucie ekranu.
    tablice wielowymiarowe php - cwiczenie 1
    Stwórz taką tabelę z tablicy użytkowników przy użyciu PHP

    Podpowiedzi:

  2. Posortuj poszczególne wymiary tablicy $users wg nazwiska użytkownika.
  3. Ćwiczenie dla chętnych (nie do końca na temat tego rozdziału):

    Wartości liczbowe wyświetlają się dziwnie. Czy wiesz, dlaczego przykładowa instrukcja echo $users[„editors”][1][2]; dała wynik 73?

    Jeśli nie, dowiedz się tego. Wskazówka: poszukaj odpowiedzi w opisie liczb całkowitych w PHP.

Rozwiązania ćwiczeń

Ćwiczenie 1

<?php
$users = [
  "admins" =>       [
    ["Mieczysław", "Kowalski", 1111],
    ["Anna", "Sobieska", 1111],
    ["Marcin", "Kwiatkowski", 1111],
  ],
  "editors" =>      [
    ["Marlena", "Wiśniewska", 0111],
    ["Lidia", "Adamczuk", 0111],
    ["Alan", "Baranowski", 0111],
  ],
  "subscribers" =>  [
    ["Grzegorz", "Zawadzki", 0001],
    ["Zenon", "Rogoziński", 0001],
    ["Julia", "Grodzka", 0001],
    ["Zuzanna", "Radomska", 0001],
  ],
];
?>
<table>
<?php
foreach ($users as $key => $user_group) {
  echo "<tr><th colspan=3>" . $key . "</th></tr>";
  foreach ($user_group as $individual_user) {
    echo "<tr>";
    foreach($individual_user as $data_item) {
      echo "<td>" . $data_item . '</td>';
    }
    echo "</tr>";
  }
}
?>
</table>

Ćwiczenie 2

<pre>
<?php
$users = [
  "admins" =>       [
    ["Mieczysław", "Kowalski", 1111],
    ["Anna", "Sobieska", 1111],
    ["Marcin", "Kwiatkowski", 1111]
  ],
  "editors" =>      [
    ["Marlena", "Wiśniewska", 0111],
    ["Lidia", "Adamczuk", 0111],
    ["Alan", "Baranowski", 0111]
  ],
  "subscribers" =>  [
    ["Grzegorz", "Zawadzki", 0001],
    ["Zenon", "Rogoziński", 0001],
    ["Julia", "Grodzka", 0001],
    ["Zuzanna", "Radomska", 0001]
  ],
];

foreach ($users as $key => $value) {
  usort($users[$key], fn($a, $b) => $a[1] <=> $b[1]);
}

print_r($users);

Ćwiczenie 3

Te wartości są traktowane jako liczby binarne lub ósemkowe. Konkretna wartość z ćwiczenia 0111 została przez PHP potraktowana jako wartość ósemkowa, której wartość dziesiętna wynosi 73.

Udostępnij:
Share

Podobał Ci się ten artykuł?

Oceń go!

Średnia 5 / 5. Liczba głosów: 5

Jeszcze nikt nie głosował. Wyprzedź innych i zagłosuj.

Skoro spodobał Ci się ten artykuł...

Poleć go znajomym!

Ojej :( Powiedz nam, co powinniśmy poprawić!

blank
Podoba Ci się ta strona?

Pomóż nam się rozwijać, wykupując płatne konto. Dzięki temu będziemy mogli tworzyć dla Ciebie jeszcze więcej ciekawych treści, a Ty pozbędziesz się reklam.

Dodaj komentarz