Tömbök

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.

Egydimenziós tömbök

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.

Többdimenziós tömbök

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       

PHP3-ban a fenti eredménye az lesz, hogy: Ez nem műxik: Array[nem]. A stringösszefűző operátorral át lehet hidalni a problémát:

  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