PHP kézikönyv Előző 7. Fejezet. Típusok Következő 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: 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 = array( 1 = 'egy', 2 = 'kettő', 3 = 'három '); unset ($a[2]); / * ennek eredményeképpen $a így fog kinézni: $a = array (1= 'egy', 3= 'három'); és NEM így: $a = array (1 = 'egy', 2 = 'három'); * / 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: $ize[ bigyo] = 'ellenség'; echo $ize[bigyo]; / / stb. echo $tomb[ ize(true)]; $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 string ekben, 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') Példa 7-4. Az array() használata / / Tömb, mint tulajdonság hozzárendelés $map = array( 'verzió '= 4, 'rendszer' = 'Linux ', 'nyelv' = 'angol ', 'short_tags' = true); / / szigorúan számokat tartalmazó tömb $tomb = array (7, 8, 0, 156, -10); / / ez ugyanaz, mint array (0 = 7, 1 = 8,...) $valtogatas = array (10 / / 0. indexű / kulcsú, 5 = 6, 3 = 7, 'a '= 4, 11 / / kulcsa 6 (a legnagyobb egész kulcs 5 volt), '8' = 2 / / kulcsa 8 (egész!), '02 '= 77 / / kulcsa '02', 0 = 12 / / a 10 értéket felülírjuk 12-vel); / / üres tömb $ures = array(); Példa 7-5. Kollekció $szinek = array( 'piros' ,'kék' ,'zöld' ,'sárga'); foreach ($szinek as $szin) {echo "Szereted a(z) $szin színt?\n";} / * kimenete: Szereted a( z) piros színt? Szereted a( z) kék színt? Szereted a( z) zöld színt? Szereted a( z) sárga színt? * / 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: Példa 7-6. Kollekció foreach ($szinek as $kulcs = $szin) {/ / nem működik (nem módosítja a tömböt): / /$szin = strtoupper($szin); / / működik (módosítja a tömböt): $szinek[$kulcs] = strtoupper($szin);} print_r($szinek); / * kimenete: Array ([0] = PIROS [1] = KÉK [2] = ZÖLD [3] = SÁRGA) * / Ebben a példában egy egytől számozott tömböt készítünk. Példa 7-7. Egytől kezdődő index $elsonegyed = array( 1 = 'Január', 'Február', 'Március'); print_r($elsonegyed); / * kimenete: Array ([1] = 'Január '[2] = 'Február' [3] = 'Március ') * / Példa 7-8. Felöltés valós adatokkal / / egy tömb felöltése a link linkend=" ref.dir "könyvtárban / link található filenevekkel $konyvtar = opendir(' .'); while ($filenev = readdir($konyvtar)) {$filenevek[] = $filenev;} closedir($konyvtar); 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. Példa 7-9. Tömbök rendezése sort( $filenevek); print_r($filenevek); 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. Példa 7-10. Rekurzív és többdimenziós tömbök $gyumolcsok = array ("gyümölcsök "= array ("a" = "narancs ", "b" = "banán ", "c" = "alma "), "számok" = array (1, 2, 3, 4, 5, 6), "lyukak "= array ("első", 5 = "második ", "harmadik")); Előző Tartalom Következő Stringek Fel Objektumok