SwP #4: Więcej informacji o książkach – tablice wielowymiarowe i asocjacyjne

Sam tytuł książki to za mało? To może dodamy autora, opis, zdjęcie i cenę?

 

Tablice wielowymiarowe

Czym jest taka tablica? Jest to tablica wewnątrz której znajduje się inna (lub inne) tablica. W tej chwili nasze książki znajdują się w tablicy jednowymiarowej:

 

Jeśli chcielibyśmy dodać do książek autorów to moglibyśmy utworzyć nową tablicę:

Następnie w kodzie PHP moglibyśmy się odwoływać po odpowiednim indeksie:

 

Niby nic trudnego ale co w sytuacji kiedy chcielibyśmy dodać kolejne informacje? A gdy książek będzie kilka tysięcy? Jak wtedy zapanować nad tym aby odpowiednie informacje wstawić pod odpowiedni indeks? Tutaj z pomocą przychodzą tablice wielowymiarowe.

Jak taka tablica wygląda? Zobaczcie nasze książki:

W tablicy $books pod każdym indeksem znajduje się nowa tablica, która zawiera tytuł i autora książki.

Jak zatem z takiej tablicy pobrać informacje? Dla przykładu weźmy drugą książkę:

Wystarczy wskazać odpowiedni indeksy tak jak w tablicy wielowymiarowej tylko, że musimy wskazać indeks dla danej książki oraz indeks dla konkretnej informacji. Np:

Pobierze nam tytuł książki (tak „1”, bo jak pamiętacie domyślnie indeksy w tablicy zaczynają się od 0 – zero). Natomiast dla pobrania autora będzie to:

 

Mając taką tablicę musimy zmienić nasz kod odpowiedzialny za wyświetlanie tych informacji:

 

Do każdej książki przydałoby się jeszcze dodać zdjęcie okładki, cenę i krótki opis. Jak to zrobić? Możemy iść tą samą drogą i dodać jako kolejne indeksy (informacje pobrane ze strony Helion.pl):

 

I oczywiście dodajemy je na naszą stronę

Możecie zobaczyć, że cenę (która wyświetli się w <h4>) znajduje się w funkcji number_format. Funkcja ta formatuje podaną liczbę (w naszym przypadku cenę) i ma taki format:

  • $liczba – liczba, którą chcemy sformatować
  • $miejsc_dziesiętnych – ilość miejsc po przecinku (domyślnie 0 – zero)
  • $przecinek_dziesiętny – separator oddzielający część dziesiętną (domyślnie kropka „.”) – u nas będzie to przecinek
  • $separator_tysięcy – separator tysięcy, czyli znak, który oddzieli tysiące (domyślnie przecinek „,”) – dla przejrzystości u nas będzie spacja (chociaż takiej ceny jednej książki nie będzie to możemy to wykorzystać np. w koszyku, gdzie będzie suma za wszystkie książki)

Bez użycia tej funkcji ceny wyświetlałyby się tylko w złotówkach (dopóki w cenie nie znalazły by się grosze).

 

Na koniec dodamy trochę kodu CSS do pliku main.css:

 

Tablice asocjacyjne

Tutaj moglibyśmy skończyć ale rozważmy kolejne „ale”. Mając takie tablice musimy pamiętać aby za każdym razem zachowywać odpowiednią kolejność wartości (pod odpowiednimi indeksami) i tak samo musimy pamiętać o odpowiednich indeksach przy pobieraniu konkretnych danych. Czy jest sposób aby mieć nad tym większą kontrolę? Oczywiście, że tak i możemy do tego wykorzystać tablice asocjacyjne.

Tablica asocjacyjna to tablica, która w indeksie nie ma liczby a tzw. klucz. Np. Dla naszej pierwszej książki moglibyśmy utworzyć taką tablicę:

gdzie title, author, price, image i description to właśnie wspomniane klucze. Jak pobrać odpowiednią wartość? Tak samo jak w zwykłej tablicy tylko zamiast indeksu podajemy klucz:

 

Zatrzymajcie się na chwilę i spróbujcie sami przerobić książki na tablice asocjacyjne a następnie zmienić też kod odpowiedzialny za wyświetlanie tych danych 😉

 

Całość wygląda tak:

 

Git

Repozytorium: https://github.com/morawcik/sklep

Lista zmian: https://github.com/morawcik/sklep/commit/46d86c976ba59989aefbfb8d56173fa089229165


Post 4 z 4 z serii Sklep w PHP