PHPDevs

Projekt obiektowy z Composerem i Twigiem? Czytaj!

Podstawy języka > Lekcja 6

Tablice

Poznałeś już zmienne i rozumiesz (mam nadzieję) ich zastosowanie. Wyobraź sobie teraz, że potrzebujesz zapisać imiona pięciu osób (na przykład uczestników wycieczki). Co musiałbyś zrobić? Stworzyć 5 zmiennych zawierających takie imiona:

<?php
$person1 = 'Jan';
$person2 = 'Piotr';
$person3 = 'Adrian';
$person4 = 'Marek';
$person5 = 'Adam';

Nie byłoby to ani zbyt wygodne, ani tym bardziej czytelne. Dlatego też powstały tablice (array), które można nazwać zbiorem danych. Podobnie jak wszystkie inne wartości, możemy je przypisać do zmiennych. Elementy tablicy definiujemy w nawiasach kwadratowych, oddzielając je przecinkiem. Co ważne, elementy w tablicy mogą być różnego typu.

<?php
$people = ['Jan', 'Piotr', 'Adrian', 'Marek', 'Adam'];

Dla czytelności każdy element można zapisywać w nowej linii.

<?php
$people = [
    'Jan',
    'Piotr',
    'Adrian',
    'Marek',
    'Adam'
];

Spotykany jest też zapis z array() zamiast nawiasów kwadratowych, jednak ten z [ ] jest nowszy i skutecznie go wypiera.

<?php
$people = array('Jan', 'Piotr', 'Adrian', 'Marek', 'Adam');

Każdy z elementów w tablicy ma swój kolejny automatycznie nadawany numer - indeks. Możemy dzięki niemu uzyskać dostęp do konkretnego elementu w tablicy.

Uwaga

Indeksy liczymy od zera! Jeśli więc Twoja tablica składa się z 5 elementów, to otrzymają one indeksy od 0 do 4. Próba odwołania do piątego indeksu zakończy się niepowodzeniem i wyświetleniem stosownego ostrzeżenia.

Jeśli należysz do osób ciekawskich, to być może spróbowałeś już wyświetlić sobie taką tablicę i otrzymałeś niezbyt oczekiwany efekt - napis Array z ostrzeżeniem "Array to string conversion". echo nie potrafi wyświetlać całych tablic, nie możemy tablicy traktować jako zwykły tekst, ciąg znaków. Prawdę mówiąc raczej nie wyświetla się od tak całych tablic (przeważnie każdą wartość się jakoś "obrabia", najczęściej przy użyciu pętli, które niedługo poznamy), chyba że w celu testowego sprawdzenia co zawiera tablica. Do tego celu możesz użyć omówionego wcześniej var_dump() czy print_r().

<?php
$people = ['Jan', 'Piotr', 'Adrian', 'Marek', 'Adam'];
var_dump($people);

Efekt:

array(5) {
  [0]=>
  string(3) "Jan"
  [1]=>
  string(5) "Piotr"
  [2]=>
  string(6) "Adrian"
  [3]=>
  string(5) "Marek"
  [4]=>
  string(4) "Adam"
}

Bez problemu za to wyświetlimy jeden element o konkretnym indeksie.

<?php
$people = ['Jan', 'Piotr', 'Adrian', 'Marek', 'Adam'];
echo $people[1]; // result: Piotr
echo $people[4]; // result: Adam

Podobnym sposobem można nadpisać wartość danego elementu:

<?php
$people = ['Jan', 'Piotr', 'Adrian', 'Marek', 'Adam'];
echo $people[2]; // result: Adrian
$people[2] = 'Andrzej';
echo $people[2]; // result: Andrzej

Możemy jeszcze narzucić własną numerację indeksów podczas tworzenia. Poniższy zapis spowoduje, że numeracja rozpocznie się od 2 (kolejne elementy dostaną kolejne numery).

<?php
$people = [2 => 'Jan', 'Piotr', 'Adrian', 'Marek', 'Adam'];
W taki sam sposób możemy też nadać każdemu indeksowi inny numer (i nie muszą to być kolejne liczby).
<?php
$people = [
    3 => 'Jan',
    7 => 'Piotr',
    5 => 'Adrian',
    0 => 'Marek',
    2 => 'Adam'
];

Co jeśli po stworzeniu tablicy będziemy chcieli dodać do niej kolejny element? Nie ma problemu:

<?php
$people = ['Jan', 'Piotr', 'Adrian', 'Marek', 'Adam'];
$people[] = 'Arkadiusz';

Rzecz jasna istnieje możliwość podania w nawiasach konkretnego indeksu do stworzenia.

<?php
$people = ['Jan', 'Piotr', 'Adrian', 'Marek', 'Adam'];
$people[7] = 'Arkadiusz';

Klucz tekstowy

A teraz wyobraź sobie, że potrzebujesz zapisać dane każdego uczestnika wycieczki (dla przykładu: wiek, adres zamieszkania i e-mail). Tworzenie tylu zmiennych, jak już wiesz, byłoby słabym sposobem. Użyjemy tablicy, jednak posługiwanie się cyferkami, aby dostać się do danej wartości wydaje się problematyczne. Trzeba pamiętać numerek, a co będzie jak zabraknie którejś danej? Numeracja indeksów się przesunie i możemy odczytać niewłaściwe dane.

Z pomocą przychodzą nam klucze tekstowe, dzięki którym możemy dowolnie nazwać każdy element. Zdefiniujmy taką przykładową tablicę:

<?php
$person = [
    'name' => 'Jan',
    'age' => 26,
    'address' => 'Kwiatowa 1',
    'email' => 'jan@example.com'
];

Warto dodać, że jedna tablica może zawierać klucze różnego typu - zarówno liczbowe (int) jak i tekstowe (string). Inne typy zostaną rzutowane.

<?php
$person = [
    'name' => 'Jan',
    4 => 26,
    null => 'Kwiatowa 1',
    2.8 => 'jan@example.com'
];
var_dump($person);
array(4) {
    ["name"]=>
    string(3) "Jan"
    [4]=>
    int(26)
    [""]=>
    string(10) "Kwiatowa 1"
    [2]=>
    string(15) "jan@example.com"
}

Podobnie, jak w przypadku liczbowych indeksów, możemy odwołać się do danego elementu:

<?php
echo $person['address']; // result: Kwiatowa 1
Albo dodawać nowe elementy:
<?php
$person['surname'] = 'Kowalski';
echo $person['name'].' '.$person['surname']; // result: Jan Kowalski

Zagnieżdżanie tablic

Możemy bez problemu stworzyć tablicę wewnątrz innej tablicy.

<?php
$people = [
    'Jan' => [
        'age' => 26,
        'address' => 'Kwiatowa 1',
        'email' => 'jan@example.com'
    ],
    'Piotr' => [
        'age' => 32,
        'address' => 'Ogrodowa 8',
        'email' => 'piotr@example.com'
    ]
];
echo $people['Piotr']['age']; // result: 32

Na razie na tym poprzestaniemy. Podstawy tablic w tym momencie poznałeś, jednak istnieje jeszcze bardzo dużo funkcji do operacji na nich, o których warto byłoby powiedzieć. Zrobimy to później, w osobnej części kursu.

Poprzednia lekcja Dalej

Udostępnij

  • Facebook
  • Twitter
  • Google+

Komentarze