A PHP tömbjei rendezett leképezéseket valósítanak meg. A leképezés értékeket rendel kulcsokhoz. Ez a típus sokféleképpen használható, mint egy hagyományos tömb, egy lista (vektor), hash tábla, szótár, kollekció, halmaz, sor, és mások. Mivel egy újabb PHP tömb szerepelhet értékként, könnyen szimulálhatsz fákat.
Az említett struktúrák leírása ezen kézikönyv kereteibe nem fér bele, de legalább egy példát mutatunk mindegyikre. További információkért külső forrásokat kell igénybe venned erről az igen széles témáról.
Egy array (tömb) típusú változót az array() nyelvi elemmel tudsz létrehozni, amely számos vesszővel elválasztott kulcs => érték párt vár.
Egy kulcs vagy egy nemnegatív integer (egész szám) vagy egy string. Ha a kulcs egy szabványos formában megadott nemnegatív egész szám (integer), az a megfelelő módon kerül értelmezésre. Konkrétabban pl. a '8' a 8 egész szám lesz, míg a '08' a '08' string.
Az érték bármi lehet.
Ha nem adsz meg egy kulcsot, a PHP veszi az egész indexek közül a legnagyobbat, és ennél egyel nagyobb indexű elemet hoz létre. Az egészek lehetnek negatívak is, de ez igaz a negatív indexekre is. Ha például a legnagyobb index -6, akkor az következő, új index -5. Ha még nincs egész értékkel megadott index, az új kulcs 0 (nulla) lesz. Ha olyan kulcsot adsz meg, ami már a tömb eleme, a korábbi elem felülíródik.
A logikai true érték integer típusúvá alakítva a 1 indexnek felel meg. A false integer típusúvá alakítva a 0 indexnek felel meg. A NULL üres stringgé konvertálódik, amit kulcsként használva létrehoz egy üres string kulcsú bejegyzést a tömbben, de ez nem azonos az üres szögletes zárójelek használatával ([] -- új elemet fűz a tömb végéhez).
Tömbök és objektumok nem használhatók kulcsként. Ha ez mégis megtörténik, akkor figyelmeztetést kapunk: Illegal offset type.
array( [kulcs =>] érték , ... ) // a kulcs vagy egy string vagy egy nemnegatív integer (egész szám) // az érték bármi lehet |
Meglévő tömbök is módosíthatóak konkrét elemek megadásával.
Ezt úgy tudod megtenni, hogy a tömb neve után szögletes zárójelekben megadod a kulcsot, amit módosítani szeretnél. Ha elhagyod a kulcsot, és csak egy üres szögletes zárójel párt ("[]") adsz meg a változó neve után, a tömb végére illeszthetsz elemet.
$tomb[kulcs] = érték; $tomb[] = érték; // a kulcs vagy egy string vagy egy nemnegatív integer (egész szám) // az érték bármi lehet |
Jónéhámy függvény létezik a tömbökkel való munka megkönnyítésére. Lásd a tömb függvények című részt.
Megjegyzés: Az unset() függvénnyel lehet egy értéket a tömbből törölni. Figyelj arra, hogy a tömb nem lesz újraindexelve!
A foreach vezérlési szerkezet kifejezetten a tömbök számára jött létre. Egy egyszerű módszert ad tömbökön való végiglépkedésre.
Minden string típusú kulcsot idézőjelek vagy aposztrófok közé kell tenni tömbbeli elemre történő hivatkozásnál, például: $ize['bigyo'] és nem $ize[bigyo]. Vajon miért nem jó $ize[bigyo] alak? Talán láttad ezt a szintaxist régi PHP programokban:
Ez hibás, és mégis működik. Akkor mégis miért nem jó? Azért, mert a bigyo itt valójában egy nem definiált állandót jelöl, és nem a 'bigyo' sztringet (figyelj az aposztrófokra). A későbbi PHP verziókban már előfodulhatnak olyan előre definiált állandók, amelyeknek ugyanaz lesz a neve, mint ami a saját kódodban sztringként szerepel. Azért működik, mert ezeket a nem definiált állandókat a PHP a nevükkel azonos tartalmú sztringgé konvertálja. A szintaxis részben is már olvasható volt, hogy a szögletes zárójelek ('[' és ']') között egy kifejezésnek kell állnia. Ez azt jelenti, hogy írhatsz ehhez hasonló dolgokat is: Ez a példa bemutatja, hogyan használhatsz függvény visszatérési értéket tömbindexként. A PHP úgyszintén ismeri a konstansokat. Bizonyára hallottál már az E_* konstansokról.$hiba_leiras[E_ERROR] = "Fatális hiba történt"; $hiba_leiras[E_WARNING] = "A PHP figyelmeztetést adott"; $hiba_leiras[E_NOTICE] = "Informális megjegyzés"; |
$hiba_leiras[1] = "Fatális hiba történt"; $hiba_leiras[2] = "A PHP figyelmeztetést adott"; $hiba_leiras[8] = "Informális megjegyzés"; |
Valamikor a jövőben a PHP fejlesztői hozzáadhatnak egy új konstanst vagy kulcsszót a nyelvhez, és akkor bajba kerülsz. Például jelenleg sem használhatóak az empty és default szavak, mivel ezek speciális kulcsszavak.
Ha ezek az érvek nem győznek meg: ez a szintaxis egyszerűen nem javasolt, és bármikor megszűnhet működni.
Megjegyzés: Ha az error_reporting beállítást E_ALL értékre állítod be, látni fogod, hogy a PHP figyelmeztetéseket generál, valahányszor olyan indexre történik hivatkozás, ami nem definiált. (Add az error_reporting(E_ALL); sort a programod elejéhez).
Megjegyzés: Idézőjeles stringekben, egy másik szintaxis érvényes. Lásd a változók behelyettesítése című részt további részletekért.
A tömb típus a PHP-ben nagyon sokoldalú, ezért összegyűjtöttünk néhány példát, hogy megmutassuk a tömbök erejét.
// ez $a = array( 'szín' => 'piros', 'íz' => 'édes', 'alak' => 'kerek', 'név' => 'alma', 4 // 0 lesz a kulcsa ); // teljesen megyezik ezzel $a['szín'] = 'piros'; $a['íz'] = 'édes'; $a['alak'] = 'kerek'; $a['név'] = 'alma'; $a[] = 4; // 0 lesz a kulcsa $b[] = 'a'; $b[] = 'b'; $b[] = 'c'; // a következő tömböt adja: array( 0 => 'a' , 1 => 'b' , 2 => 'c' ) // vagy egyszerűen: array('a', 'b', 'c') |
Figyelj arra, hogy jelenleg közvetlenül nem lehet módosítani a tömb elemeinek értékét ezzel a ciklussal. A problémát a következőképpen tudod megkerülni:
Ebben a példában egy egytől számozott tömböt készítünk.
A tömbök rendezettek. A sorrendet számos függvénnyel megváltoztathatod. Lásd a tömb függvények című részt további információkért.
Mivel a tömb egy értéke bármi lehet, értékként akár egy másik tömböt is megadhatsz. Ilyen formában készíthetsz rekurzív vagy többdimenziós tömböket.