- Wprowadzenie
- Tablice asocjacyjne
- Przeglądanie tablic
- Sortowanie tablic
- Tworzenie stringów z tablic i odwrotnie
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;
?>
Hosting stworzony dla WordPressa
Masz stronę WWW na WordPressie? My też uwielbiamy ten system dla stron internetowych. Dlatego stworzyliśmy hosting specjalnie dla jego użytkowników.