POWRÓT NA STRONĘ SZKOŁY

Tablice w PHP

Do tej pory operowaliśmy pojedynczymi zmiennymi na przykład $a=2.3, $b='Ala ma kota', itd. Bardzo często zachodzi jednak potrzeba przechowania dużej lub bardzo dużej liczby danych. Wypisywanie w kodzie setek a może tysięcy zmiennych w postaci $jakas_zmienna jest paktycznie niewykonalne. Dlatego wymyślono tablice. Jedna zmienna, na przykład $t, jeżeli jest tablicą, to może przechowywać wiele różnych danych. Co ciekawe, o ile np w C++ czy Pascalu muszą to być dane jednego typu, o tyle w PHP nie ma takich ograniczeń. Bardzo ważny jest szybki dostęp do danych przechowywanych w tablicy. Pliki są czytane sekwencyjnie - jeden element po drugim, aby "dostać się" do potrzebnego elementu musimy wczytać wszystkie elementy znajdujące się przed nim. Do elemenu tablicy dostajemy się natychmiast, poprzez podanie indeksu lub klucza danego elementu. Na przykład $t[12] jest elementem tablicy $t o indeksie równym 12, natomiast $t['nazwiska'] jest elementem tablicy $t o kluczu 'nazwiska'. Jak więc widzimy:

  • tablice, np. $t, to zmienne przechowujące wiele danych, przy czym w PHP mogą to być dane różnych typów;
  • poszczególne dane są elementami tablicy - $t[indeks] lub $t[klucz];
  • indeksy, to kolejne nieujemne liczby całkowie, natomiast klucze to łańcuchy znaków (stringi);
  • możemy więc podzielić tablice na indeksowane numerycznie oraz tablice asocjacyjne;
  • tablice asocjacyjne, to tablice indeksowane kluczami;
  • do każdego elementu tablicy mamy bezpośredni dostęp, np. $a=$t[6]; oznacza przypisanie zmiennej $a elementu tablicy $t o indeksie 6;

Jeżeli elementy tablicy są także tablicami, to mamy tablicę wielowymiarową. Jeżeli chcemy na przykład zapisać w tablicy, dane znajdujące się w tabeli, to musimy zastosować talicę dwuwymiarową, w której każdy wiersz tabeli (rekord) będzie się składał z kolumn (pól) tabeli. Elementy takiej tablicy $tabela[$wiersz][$kolumna] będą określane przez dwa indeksy - numer wiersza i numer kolumny.

Uwaga! Często indeksy numeryczne, nazywane są również kluczami - spotyka się pojęcia klucze numeryczne i klucze opisowe. W tym opracowaniu - klucz jest zawsze stringiem, czasem używa się określenia klucz opisowy, co nie zmienia przyjętej zasady.

Inicjowanie tablic

W ćwiczeniach wykonywanych do tej pory, inicjowaliśmy zmienne poprzez instrukcję przypisana np. $a=3; zmienna $a została zainicjowana poprzez przypisanie jej wartości 3. Jeżeli w kodzie zastosujemy zmienną niezainicjowaną, to będzie to skutkować błędami wykonania. W przypadku zmiennych typu tablicowego stosujemy specjalne sposoby ich inicjacji.

Inicjowanie tablic poprzez zastosowanie funkcji array()

W przypadku zmiennej która ma być tablicą, możemy jawnie ten fakt zadeklarować stosując funkcję array(). Wykonując instrukcję $tablica=array(); inicjujemy zmienną $tablica typu tablicowego. Tak zainicjowana tablica, nie posiada elementów, jest pusta. Ten sposób stosujemy wtedy, gdy nie znamy liczby elementów, lub gdy chcemy usunąć wszystkie elementy tablicy.

Podczas inicjowania możemy od razu przypisać wartości elementom tablicy: $liczby=array(1, 2, 5, 1.25);. Postępując w ten sposób utworzyliśmy 4-elementową tablicę $liczby. Elementy tej tablicy to $liczby[0], $liczby[1], $liczby[2] oraz $liczby[3]. Liczby w nawiasach kwadratowych, to indeksy elementów, w tym przypadku zostały "przydzielone" automatycznie zaczynając od 0 (zera). W tym przypadku, mamy więc tablicę indeksowaną numerycznie. Jak myślisz, jakie wartości przechowują poszczególne elementy tablicy? Sprawdzimy to wykonując ćwiczenie.

Podczas wykonywania ćwiczeń będziemy korzystać z funkcji print_r(), wyświetlającej informacje o zmiennej. W celu pokazania struktury tablicy, należy również zastosować znaczniki preformatowania <pre>.

Ćwiczenie 2_0_0_1. Inicjowanie tablicy poprzez zastosowanie funkcji array(), bez określania indeksów

Kod PHP realizujący, to zadanie:

<?php
  $liczby=array(1, 2, 5, 1.25);
  echo '$liczby[0] przechowuje wartość '.$liczby[0].'<br />';
  echo '$liczby[1] przechowuje wartość '.$liczby[1].'<br />';
  echo '$liczby[2] przechowuje wartość '.$liczby[2].'<br />';
  echo '$liczby[3] przechowuje wartość '.$liczby[3].'<br />';
  echo'<pre>';
  print_r($liczby);
  echo'</pre>';
?>

W ostatnim ćwiczeniu indeksy zostały utworzone domyślnie zaczynając od zera. Możemy jednak sami nadać indeksy poszczególnym elementom. Posługując się ostatnim przykładem, możemy na przykład utworzyć tablicę $liczby=array(1, 20 => 2, 10 => 5, 1.25);. Jaką zmianę zauważyłeś? Dwa środkowe elementy są inne. 20 => 2 oznacza, że elementowi o indeksie 20 przypisujemy wartość 2, natomiast elementowi o indeksie 10 przypisujemy wartość 5. Pierwszy element będzie miał domyślny indeks 0, natomiast ostatni to największy powiększony o 1 czyli 21.

Ćwiczenie 2_0_0_2. Inicjowanie tablicy poprzez zastosowanie funkcji array(), z określeniem indeksów

Kod PHP realizujący, to zadanie:

<?php
  $liczby=array(1, 20 => 2, 10 => 5, 1.25);
  echo '$liczby[0] przechowuje wartość '.$liczby[0].'<br />';
  echo '$liczby[20] przechowuje wartość '.$liczby[20].'<br />';
  echo '$liczby[10] przechowuje wartość '.$liczby[10].'<br />';
  echo '$liczby[21] przechowuje wartość '.$liczby[21].'<br />';
  echo'<pre>';
  print_r($liczby);
  echo'</pre>';
  echo '$liczby[5] przechowuje wartość '.$liczby[5];
?>

Element o indeksie 5 nie istnieje więc pod koniec wykonania skryptu powinien się pojawić komunikat o błędzie.

W praktyce, najczęściej indeksy numeryczne są kolejnymi liczbami począwszy od zera.

W przypadku tablic asocjacynych nie mamy indeksów które są liczbami całkowitymi nieujemnymi, natomiast mamy klucze, które są łańcuchami znaków. Sposób pokazany w ostatnim ćwiczeniu możemy zastosować do zainicjowania tablicy asocjacyjnej, na przykład: $liczby=array('pierwsza' => 1, 'dwudziesta' => 2, 'dziesiata' => 5, 'dwudziesta_pierwsza' => 1.25);, gdzie 'pierwsza', 'dziesiata', 'dwudziesta' oraz 'dwudziesta_pierwsza' są kluczami elementów tablicy.

Ćwiczenie 2_0_0_3. Inicjowanie tablicy asocjacyjnej poprzez zastosowanie funkcji array()

Kod PHP realizujący, to zadanie:

<?php
  $liczby=array('pierwsza'=>1,'dwudziesta'=>2,'dziesiata'=>5,'dwudziesta_pierwsza'=>1.25);
  echo '$liczby['."'pierwsza'".'] przechowuje wartość '.$liczby['pierwsza'].'<br />';
  echo '$liczby['."'dwudziesta'".'] przechowuje wartość '.$liczby['dwudziesta'].'<br />';
  echo '$liczby['."'dziesiata'".'] przechowuje wartość '.$liczby['dziesiata'].'<br />';
  echo '$liczby['."'dwudziesta_pierwsza'".'] przechowuje wartość '
  .$liczby['dwudziesta_pierwsza'].'<br />';
  echo'<pre>';
  print_r($liczby);
  echo'</pre>';
?>

Inicjowanie tablic poprzez zastosowanie nawiasów kwadratowych

Możemy od razu przystąpić do przypisywania wartości poszczególnym elementom tablicy i interpreter będzie "wiedział" że ma do czynienia ze zmienną typu tablicowego. Prześledzimy to, modyfikując poprzednie przykłady.

Ćwiczenie 2_0_0_4. Inicjowanie tablicy bez określania indeksów

Kod PHP realizujący, to zadanie:

<?php
  $liczby[]=1;
  $liczby[]=2;
  $liczby[]=5;
  $liczby[]=1.25;
  echo '$liczby[0] przechowuje wartość '.$liczby[0].'<br />';
  echo '$liczby[1] przechowuje wartość '.$liczby[1].'<br />';
  echo '$liczby[2] przechowuje wartość '.$liczby[2].'<br />';
  echo '$liczby[3] przechowuje wartość '.$liczby[3].'<br />';
  echo'<pre>';
  print_r($liczby);
  echo'</pre>';
?>

Ćwiczenie 2_0_0_5. Inicjowanie tablicy z określeniem indeksów

Kod PHP realizujący, to zadanie:

<?php
  $liczby[]=1;
  $liczby[20]=2;
  $liczby[10]=5;
  $liczby[]=1.25;
  echo '$liczby[0] przechowuje wartość '.$liczby[0].'<br />';
  echo '$liczby[20] przechowuje wartość '.$liczby[20].'<br />';
  echo '$liczby[10] przechowuje wartość '.$liczby[10].'<br />';
  echo '$liczby[21] przechowuje wartość '.$liczby[21].'<br />';
  echo'<pre>';
  print_r($liczby);
  echo'</pre>';
?>

Ćwiczenie 2_0_0_6. Inicjowanie tablicy asocjacyjnej poprzez zastosowanie nawiasów kwadratowych

Kod PHP realizujący, to zadanie:

<?php
  $liczby['pierwsza']=1;
  $liczby['dwudziesta']=2;
  $liczby['dziesiata']=5;
  $liczby['dwudziesta_pierwsza']=1.25;
  echo '$liczby['."'pierwsza'".'] przechowuje wartość '.$liczby['pierwsza'].'<br />';
  echo '$liczby['."'dwudziesta'".'] przechowuje wartość '.$liczby['dwudziesta'].'<br />';
  echo '$liczby['."'dziesiata'".'] przechowuje wartość '.$liczby['dziesiata'].'<br />';
  echo '$liczby['."'dwudziesta_pierwsza'".'] przechowuje wartość '
  .$liczby['dwudziesta_pierwsza'].'<br />';
  echo'<pre>';
  print_r($liczby);
  echo'</pre>';
?>

Jeżeli zapomniałeś jak przygotować i gdzie zapisywać pliki testowe: