Tablice


Wprowadzenie

Tablice są specyficznym typem zmiennych – to, najprościej mówiąc, zmienne zawierające w sobie uporządkowany zbiór zmiennych. Dostęp do danych uzyskuje się podając odpowiednią liczbę w nawiasie kwadratowym, bezpośrednio po nazwie zmiennej. Liczba ta, to tak zwany indeks – kolejny numer zmiennej w tablicy. Tak samo przypisuje się wartość do tablicy. Przykład:

<?
 
    $tablica[0] = "Wpis numer 0";
    $tablice[1] = "Wpis numer 1";
    $tablica[2] = "Wpis numer 2";

    echo $tablica[2]; // Wyświetlony zostanie napis "Wpis numer 2";

?>

Aby najprościej dodać kolejny wpis na końcu tablicy wystarczy przy przypisywaniu wartości nie wpisywać indeksu do nawiasów kwadratowych. Jeśli w ten sposób dodawane są wpisy do nowej tablicy, to pierwszy wpis ma indeks 0.

Indeks można też podawać ze zmiennej, a nawet z innej tablicy czy funkcji:

<?
 
    $tab1[] = 1;
    $tab1[] = 0;
    $tab1[] = 3;
    $tab1[] = 2;

    $tab2[] = "Pierwszy";
    $tab2[] = "Drugi";
    $tab2[] = "Trzeci";
    $tab2[] = "Czwarty";

    echo $tab2[$tab1[2]];

?>

Elementem tablicy może być każdy typ zmiennej (z innymi tablicami i obiektami włącznie).

Tablice asocjacyjne

W PHP występuje też inny rodzaj tablic, tak zwane tablice asocjacyjne. Są to tablice, w których zamiast indeksów liczbowych używa się identyfikatorów znakowych (kluczy):

<?
    
    $tablica['imie'] = 'Jan';
    $tablica['nazwisko'] = 'Kowalski';
    $tablica['adres'] = 'Polna 1';

 echo $tablica['imie'].' '.$tablica['nazwisko'].', ul. '.$tablica['adres'];

?>

W tym miejscu warto wspomnieć o alternatywnym sposobie definiowania tablic, zarówno asocjacyjnychm, jak i indeksowanych numerycznie. Służy temu funkcja array():

<?
 
     $tab = array(
        'imie' => 'Jan',
        'nazwisko' => 'Kowalski',
        'adres' => 'Polna 1'
    );

    $tab2 = array(0 => 'zero', 1 => 'jeden', 2 => 'dwa', 3 => 'trzy');

    echo $tab['nazwisko'].' '.$tab2[1];

?>

Przeglądanie tablic

Bardzo często zachodzi potrzeba wykonania operacji na wszystkich elementach tablicy. Sprawa jest prosta jeśli tablica jest zwykłą tablicą z indeksami liczbowymi i znasz ilość tych elementów:

<?
 
    $tab[] = 1;
    $tab[] = 2;
    $tab[] = 3;
    $tab[] = 4;
    $tab[] = 5;

    for ($x = 0; $x < 5; $x++) {   // Pętla wykona się 5 razy (0...4)
        echo $tab[$x];
    }

?>

Sprawa nieco się komplikuje, jeśli nie znasz ilości elementów tablicy. Wtedy z pomocą przychodzi funkcja count($nazwa_tablicy). Zwraca ona ilość elementów w tablicy podanej jako parametr. Wtedy pętla wygląda tak:

<?
 
    $tab[] = 1;
    $tab[] = 2;
    $tab[] = 3;
    $tab[] = 4;
    $tab[] = 5;

    for ($x = 0; $x < count($tab); $x++) {
        echo $tab[$x];
    }

?>

A co jeśli masz do czynienia z tablicą asocjacyjną? Nawet jeśli znasz ilość jej elementów, to pozostaje kwestia indeksowania. Wykorzystaj konstrukcję foreach():

<?
 
    $tab["imie"] = "Jan";
    $tab["nazwisko"] = "Kowalski";
    $tab["adres"] = "Polna 1";

    foreach ($tab as $element) {
        echo "$element
";
    }

    echo '
';

    foreach ($tab as $klucz => $element) {
        echo "$klucz = $element
";
    }
?>

Pętla wykonuje się dla każdego elementu tablicy. W kolejnych iteracjach bieżący element tablicy przepisywany jest do zmiennej $element. W drugim przykładzie widzisz inny wariant foreach(), pozwalający obok wartości elementu tablicy pobrać także nazwę klucza ($klucz).

Sortowanie tablic

PHP ofertuje cały zestaw funkcji służących do sortowania tablic. Są to: asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), i uksort(). Większość funkcji (oprócz trzech ostatnich) przyjmuje jeden parametr: zmienną zawierającą tablicę do posortowania. Żadna nie zwraca wyniku.

Opis działania poszczególnych funkcji:

  • asort() – sortuje tablice asocjacyjne, zachowując przypisanie kluczy do wartości:
<?
 
  $owoce = array ("d"=>"mango", "a"=>"papaja", "b"=>"banan", "c"=>"aronia");

  asort ($owoce);
  reset ($owoce); // Funkcja ta powoduje powrót do pierwszego elementu

    while (list ($klucz, $wartosc) = each ($owoce)) {
        echo "$klucz = $wartosc\n";
    }

?>

Wynikiem działania powyższego przykładu powinno być:

c = aronia
b = banan
d = mango
a = papaja
  • arsort() – sortuje w odwrotnej kolejności tablice asocjacyjne, zachowując przypisanie kluczy do wartości. Funkcja prawie identyczna jak poprzednia, tyle że dane sortowane są “od tyłu”,
  • ksort() – sortuje tablice asocjacyjne według kluczy. Powyższy przykład po podmianie funkcji asort na ksort powinien dać taki wynik:
a = papaja
b = banan
c = aronia
d = mango
  • rsort() – sortuje zwykłe tablice (nieasocjacyjne) w odwróconej kolejności,
  • sort() – sortuje zwykłe tablice (nieasocjacyjne) w kolejności alfabetycznej,
  • uasort() – funkcja sortująca tablice asocjacyjne za pomocą zdefiniowanej przez użytkownika funkcji porównującej elementy (nazwa funkcji jest podawana za pomocą drugiego parametru),
  • usort() – funkcja sortująca zwykłe tablice za pomocą funkcji zdefiniowanej przez użytkownika,
  • uksort() – funkcja sortująca tablice asocjacyjne według klucza za pomocą funkcji zdefiniowanej przez użytkownika.

W trzech ostatnich funkcjach sortujących należy jako drugi parametr podać nazwę funkcji porównującej elementy tablicy. Funkcja taka przyjmuje 2 argumenty. Zwracane jest 0 jeśli argumenty są sobie równe, -1 jeśli pierwszy argument jest mniejszy od drugiego, a 1 jeśli jest większy.

Tworzenie stringów z tablic i odwrotnie

PHP umożliwia zamianę stringów na tablice i odwrotnie. Zamiana taka jest bardzo przydatna, jeśli zachodzi potrzeba wyciągnięcia fragmentu danych z ciągu znaków. Załóżmy, że odczytałeś z pliku z danymi linię z loga zapisanego przez licznik WWW: “12/11/2000;19:23:33;Netscape Navigator;192.168.1.1”.

Jak widać dane rozdzielone są średnikami. Do rozdzielania stringów na tablicę służy funkcja explode(). Jako pierwszy parametr przyjmuje ona znak lub dłuższy ciąg, który oddziela kolejne pola, jako drugi parametr – string do rozdzielenia.

Opcjonalnie można podać trzeci argument, który oznacza maksymalną liczbę pól – jeśli jest ich więcej, to ostatnie pole będzie zawierało wszystkie pozostałe pola. Funkcja zwraca tablicę zawierającą kolejne pola. W przykładzie z danymi z licznika wywołanie funkcji powinno wyglądać tak:

<?
 
     $dane = "12/11/2000;19:23:33;Netscape;192.168.1.1";

    $tablica = explode(";", $dane);

    foreach ($tablica as $wartosc) {
        echo "$wartosc
";
    }

?>

Istnieje także rozszerzona wersja funkcji explode: split(). Różnica polega na tym, że zamiast prostego ciągu znaków rozdzielających pola, akceptuje ona wyrażenia regularne.

Czasem potrzebne jest działanie w drugą stronę: złącznie pól tablicy w jeden ciąg, w którym pola oddzielone są znakiem (lub kilkoma znakami). Do tego celu służy funkcja implode(). Jako pierwszy parametr podawany jest ciąg za pomocą którego “sklejane” są elementy tablicy, a jako drugi – tablica do posklejania.

Zwracany jest string zawierający posklejane elementy. Jako przykład zastosowania może posłużyć zapisywanie danych o użytkowniku w aplikacji licznika odwiedzin – tablica zawiera dane o odwiedzającym, a potrzebny jest ciąg oddzielany średnikami. Wtedy wywołanie funkcji powinno wyglądać tak:

<?
 
   $tablica = array('12/11/2000', '19:23:33', 'Netscape', '192.168.1.1');

   $dane = implode(";", $tablica);

   echo $dane;

?>
  • Czy artykuł był pomocny ?
  • Tak   Nie

Tematy powiązane

Szukaj
Generic filters
Tylko dokładne dopasowania
Szukaj w tytułach
Szukaj w treści
Wyświetl posty typu:
lub