A tömbök mind hashtáblaként (asszociatív tömb), mint indexelt tömbként (vektor, normál tömb) működnek.
A PHP támogatja mind a normál, mind az asszociatív tömböket. Valójában nincs is a kettő között különbség. Tömböket a list() vagy az array() függvényekkel lehet létrehozni, vagy explicit beállítani a tömb egyes elemeinek értékét.
1 2 3 $a[0] = "abc"; 4 $a[1] = "def"; 5 $b["foo"] = 13; 6 7 |
Létrehozhatók tömbök úgy is, hogy egyszerűen elemeket adunk a tömbhöz. Amikor egy értéket adunk egy tömbváltozóhoz úgy, hogy a tömbváltozó után a szögletes zárójelben nincs semmi, az érték a tömb végére fűződik. [mint a Perl push]
1 2 3 $a[] = "Árvíztűrő"; // $a[2] == "Árvíztűrő" 4 $a[] = "tükörfúrógép"; // $a[3] == "tükörfúrógép" 5 6 |
A tömböket rendezni is lehet az asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), és végül, de nem utolsó sorban a uksort() függvények segítségével a rendezés típusától függően.
A tömb elemeit a count() függvénnyel lehet megszámolni.
A tömböt be is lehet járni [szép sorban] a next() és a prev() függvények segítségével. Egy másik gyakori módja a tömb bejárásának az each() függvény.
A többdimenziós tömbök tulajdonképp egy nagyon egyszerű állatfaj. Mindegyik tömbdimenziónál adni kell egy [kulcs] részt a végéhez [Akik nagy tömbökkel dolgoznak, azok vigyázzanak, mert ha nem jól indexelik a többdimenziós tömbjüket, nagyon lelassulhat a programjuk. Úgy indexeljük a tömböt, hogy lehetőleg minél kevesebbszer kelljen változtatni az első indexeket]:
1 2 3 $a[1] = $f; # egy dimenziós példák 4 $a["izé"] = $f; 5 6 $a[1][0] = $f; # kétdimenziós 7 $a["izé"][2] = $f; # (lehet keverni a numerikus és az asszociatív indexeket) 8 $a[3]["php"] = $f; # (itt is) 9 10 $a["izé"][4]["bár"][0] = $f; # négy dimenziós! 11 12 |
PHP3-ban nem lehet közvetlenül stringből többdimenziós tömbre hivatkozni. Például az alábbi kód nem a várt eredményt fogja adni:
1 2 3 $a[3]['nem'] = 'jó'; 4 echo "Ez nem műxik: $a[3][nem]"; 5 6 |
1 2 3 $a[3]['ez'] = 'jó'; 4 echo "Ez már jó: " . $a[3][ez]; 5 6 |
PHP4-ben, az egész problémát ki lehet játszani azzal, hogy a tömbhivatkozást (a stringen belül) kapcsos zárójelbe tesszük:
1 2 3 $a[3]['ez'] = 'jó'; 4 echo "Ez jó php4-ben: {$a[3][ez]}"; 5 6 |
Többdimenziós tömböket sokféleképp fel lehet "tölteni", de a legtrükkösebb megoldás erre az array() parancs az asszociatív tömbökre. Az alábbi két kis kód egy egydimenziós tömböt azonos módon tölt fel [aki látott már perl-t annak nem új]:
1 2 3 # 1-es példa: 4 5 $a["szín"] = "piros"; 6 $a["íz"] = "édes"; 7 $a["alak"] = "kerek"; 8 $a["név"] = "alma"; 9 $a[3] = 4; 10 11 # 2-es példa: 12 $a = array( 13 "szín" => "piros", 14 "íz" => "édes", 15 "alak" => "kerek", 16 "név" => "alma", 17 3 => 4 18 ); 19 20 |
Az array() függvény egymásba ágyazható többdimenziós tömbökhöz:
1 2 3 <? 4 $a = array( 5 "alma" => array( 6 "szín" => "piros", 7 "íz" => "édes", 8 "alak" => "kerek" 9 ), 10 "narancs" => array( 11 "szín" => "narancssárga", 12 "íz" => "fanyar", # én is tudom, hogy nem olyan 13 # de ez volt az eredetiben... 14 "alak" => "kerek" 15 ), 16 "banán" => array( 17 "szín" => "sárga", 18 "íz" => "pépes", 19 # Itt pastey volt, de Hojtsy Gábor 20 # megfejtette a relytélyt, és elvitte 21 # az érte járó hangszórót. 22 # Hmm. pépes, mint íz. Na mindegy, végülis ez nem 23 # nyelvészkönyv, hanem programozási... 24 # különben is, ha az angoloknak is jó volt... 25 "alak" => "banán alakú" 26 # ezek az angolok TUDNAK VALAMIT!!! 27 ) 28 ); 29 30 echo $a["alma"]["íz"]; # kiírja, hogy "édes" 31 ?> 32 33 |