|
użytkowników online: 78
|
OPINIE UŻYTKOWNIKÓW
|
Nie jestem webmasterem, ale i na mnie zrobiła wrażenie szybkość reakcji Darka na mój problem. Jego kompetencja i przede wszystkim zupełnie niemodna w dzisiejszych skomercjalizowanych czasach - zwykła ludzka życzliwość dla innego człowieka. Tacy ludzie to dziś gatunek niemal wymarły...
Leszek
Wojskowy Instytut Medyczny
|
|
PODRĘCZNIK PHP 5.x, 4.x, 3.x - częściowo spolszczony / źródło: www.php.net
[Spis]
[A]
[B]
[C]
[D]
[E]
[F]
[G]
[H]
[I]
[J]
[K]
[L]
[M]
[N]
[O]
[P]
[Q]
[R]
[S]
[T]
[U]
[V]
[X]
[W]
[Z]
Tablica w PHP jest obecnie uporządkowaną mapą. Mapa jest typem, który
przyporządkowuje wartości do
kluczy. Typ ten jest optymalizowany na wiele sposobów,
więc można go używać jako typową tablicę, albo listę (wektorową),
tablicę asocjacyjną (która jest jedną z implementacji mapy), słownik,
kolekcję, stos, kolejkę, i temu podobne. Ponieważ wartością tablicy może
być inna tablica PHP, można także łatwo symulować drzewa.
Wyjasnienie wspomnianych struktur wykracza poza problematykę tego
podręcznika,
aczkolwiek poniżej uwzględniono conajmniej jeden przykład na każdą z nich.
Głębiej zainteresowanych czytelników odsyłamy do odpowiedniej literatury
informatycznej.
Tablicę można utworzyć za pomocą konstrukcji językowej
array(). Argumentem tej konstrukcji są rozdzielone
przecinkiem pary
klucz => wartość.
klucz może być albo nieujemną liczbą całkowitą,
albo łańcuchem znaków.
Jeśli klucz jest standardową reprezentacją nieujemnej liczby całkowitej,
zostanie zinterpretowany tak, jak jest (tzn. '8'
będzie zinterpretowane jako 8, podczas gdy
'08' będzie zinterpretowane jako
'08').
Wartością może być cokolwiek.
Jeśli pominiesz klucz, to jako klucz zostanie użyty najwyższy indeks
całkowity + 1. Jeśli nie ma w ogóle indeksu całkowitego, to klucz będzie
miał wartość 0 (zero). Jeśli użyjesz klucza, do którego
już wcześniej została przypisana wartość, wartość ta zostanie nadpisana.
array( [klucz =>]
wartość
, ...
)
// klucz jest albo łańcuchem znaków, albo nieujemną
liczbą całkowitą
// wartość może być dowolna |
Można zmieniać istniejącą tablicę jawnie ustawiając wartości.
Robi się to przez przypisanie wartości do tablicy z podaniem klucza w
nawiasach kwadratowych. Można także pominąć klucz i użyć pustej pary
nawiasów ("[]").
$arr[klucz] = wartość;
$arr[] = wartość;
// klucz jest albo łańcuchem znaków, albo nieujemną
liczbą całkowitą
// wartość może być dowolna |
Jeśli tablica $arr nie istnieje, zostanie stworzona.
Jest to więc metoda na tworzenie tablic. Aby zmienić wartość konkretnego
klucza, po prostu przypisz nową wartość do niego. Aby usunąć parę
klucz/wartość, trzeba użyć funkcji unset().
Jest wiele przydatnych funkcji obsługi tablic, o czym więcej w rozdziale
Tablice.
Notatka:
Funkcja unset() pozwala kasować komórki tablicy.
W takiej sytuacji jednak tablica NIE zostanie zreindeksowana.
Struktura kontrolna
foreach została stworzona
specjalnie dla potrzeb tablic. Dzięki niej można łatwo trawersować tablicę.
W starych skryptach można spotkać taką składnię:
Ten zapis jest niepoprawny, ale działa. Dlaczego zatem jest niepoprawny?
Powód jest to, co opisano w rozdziale składnia, że pomiędzy
nawiasami kwadratowymi (' [' i ' ]')
musi znajdować się wyrażenie. Oznacza to, że można używać czegoś takiego:
Jest to przykład użycia wartości zwracanej przez funkcję jako indeksu
tablicy. PHP zna też stałe, więc można spotkać zastosowanie
E_*.
Proszę pamiętać, że E_ERROR jest także ważnym
identyfikatorem, tak jak bar w pierwszym przykładzie.
Ale ostatni przykład znaczy to samo co:
ponieważ E_ERROR znaczy to samo co
1, itd.
W takiem razie, jak to możliwe, że $foo[bar] działa?
To działa, ponieważ bar, zgodnie z jego zapisem
powinien być stałą. Jednakże w tym przypadku nie instnieje stała o nazwie
bar. PHP teraz zakłada, że masz na myśli
bar literalnie, czyli jako łańucuch
"bar", tylko że zapomniałeś napisać cudzysłowów.
Kiedyś w przyszłości grupa PHP może chcieć dodać jeszcze jedną stałą lub
słowo kluczowe i wtedy będziesz miał kłopot. Dla przykładu, obecnie
już nie można używać słów empty i
default, gdyż są to specjalne słowa kluczowe.
Poza tym, jeśli dotąd argumenty nie przekonują cię: ta składnia jest
po prostu odrzucona i kiedyś może przestać działać.
Notatka:
Po przełączeniu error_reporting na E_ALL, zobaczysz, że
PHP generuje ostrzeżenie, kiedy tylko powyższa składnia zostanie
użyta. Tak samo generowane będą ostrzeżenia odnośnie innych odrzuconych
"udogodnień". (umieść w swoim skrypcie linię
error_reporting(E_ALL);)
Notatka:
Składnia ta jest dozwolona wewnątrz łańcucha znaków w podwójnych
cudzysłowach. Więcej szczegółów na ten temat w rozdziale
parsowanie zmiennych.
Typ tablicowy w PHP jest bardzo różnorodny, co prezentują poniższe
przykłady.
Przykład 11-4. Użycie array() |
// tablica jako mapa właściwości
$mapa = array( 'version' => 4
, 'OS' => 'Linux'
, 'lang' => 'polski'
, 'short_tags' => true
);
// tylko klucze liczbowe
$array = array( 7
, 8
, 0
, 156
, -10
);
// znaczy to samo co array( 0 => 7, 1 => 8, ...)
$zmiany = array( 10 // klucz = 0
, 5 => 6
, 3 => 7
, 'a' => 4
, 11 // klucz = 6 (najwyższy indeks całkowity był 5)
, '8' => 2 // klucz = 8 (całkowity!)
, '02' => 77 // klucz = '02'
, 0 => 12 // wartość 10 będzie nadpisana przez 12
);
// pusta tablica
$pusta = array();
|
|
Przykład 11-5. Kolekcja |
$kolory = array('czerwony','niebieski','zielony','żółty');
foreach ( $kolory as $kolor ) {
echo "Czy lubisz $kolor?\n";
}
/* wynik:
Czy lubisz czerwony?
Czy lubisz niebieski?
Czy lubisz zielony?
Czy lubisz żółty?
*/
|
|
Obecnie nie jest możliwa zmiana wartości w tabeli przy użyciu takiej pętli.
Można to jednak rozwiązać tak:
Przykład 11-6. Collection |
foreach ($kolory as $klucz => $kolor) {
// nie działa:
//$kolor = strtoupper($kolor);
// działa:
$kolory[$klucz] = strtoupper($kolor);
}
print_r($kolory);
/* wynik:
Array
(
[0] => CZERWONY
[1] => NIEBIESKI
[2] => ZIELONY
[3] => ŻÓŁTY
)
*/
|
|
Poniższy przykład tworzy tablicę z pierwszym kluczem 1.
Przykład 11-7. Pierwszy klucz 1 |
$kwartał = array(1 => 'Styczeń', 'Luty', 'Marzec');
print_r($kwartał);
/* wynik:
Array
(
[1] => 'Styczeń'
[2] => 'Luty'
[3] => 'Marzec'
)
*/
|
|
Przykład 11-8. Wypełnianie prawdziwej tablicy |
// wypełnij tablicę zawartością folderu
$uchwyt = opendir('.');
while ($plik = readdir($uchwyt))
{
$pliki[] = $plik;
}
closedir($uchwyt);
|
|
Dane w tablicach są uporządkowane. Ich kolejność może być zmieniona za
pomocą różnorodnych funkcji sortujących. Więcej na ten temat w rozdziale
tablice.
Przykład 11-9. Sortowanie tablic |
sort($pliki);
print_r($pliki);
|
|
Ponieważ wartością tablicy może być wszystko, może też nią być inna
tablica. Można w ten sposób tworzyć tablice rekursywne i wielowymiarowe.
Przykład 11-10. Tablice rekursywne i wielowymiarowe |
$owoce = array ( "owoce" => array ( "a" => "pomarańcza"
, "b" => "banan"
, "c" => "jabłko"
)
, "liczby" => array ( 1
, 2
, 3
, 4
, 5
, 6
)
, "dziury" => array ( "pierwsza"
, 5 => "druga"
, "trzecia"
)
);
|
|
User Contributed NotesSimon Rig
|