Elz fejezetnkben megismertk a vltozkat. Gyakran szksges, hogy a vltozinkat csoportokba rendezzk, listzzuk, amiket aztn kzs nven is megszlthatunk. Nagyon leegyszerstve ezeket nevezzk tmbknek. A tmbk teht a adatainkat rendezett csoportokban troljk. Minden tmbnek van egy neve, valamint az egyes tmbelemeknek is van egy sajt azonostjuk a tmbn bell - ezt kulcsoknak, vagy tmbindexeknek nevezzk. Az egsz tmbt annak nevvel, az egyes adatokat a tmb nevvel s a tmbelem klcsval tudjuk elrni. Az egyes tmbelemekben trolhatunk integer, float, string, boolean tpus adatokat, vagy akr teljes tovbbi tmbket is. gy tbb egymsba ptett tmbbel egy "fa szerketet" is lekpezhetnk.
A tmbelemek azonostjaknt megadhat nem negatv egsz szm (integer), vagy egy karaktersor (string). Ennek megfelelen lteznek norml (numerikus) s asszociatv tmbk. A norml tmbknl ezt az azonostt a tmb indexnek, mg asszociatv tmbknl a kulcsnak szoktuk nevezni.
norml (numerikus) tmbk
Alaprtelmezs szerint a tmbket szmokkal indexeljk. A tmb tartalmazhat tetszleges szm tmbelemet, amiknek van egyedi indexk s minden tmbelembe sajt rtket tlthetnk. A tmbelemeket vesszvel kell elvlasztani egystl.
Fontos megjegyezni: Automatikusan generlt tmbindexeknl az els elem indexe mindig 0 lesz. Teht egy 5 elemes folyamatosan (kihagys nlkl) indexelt tmb utols elemnek indexe nem 5, hanem 4 lesz.
Tmb ltrehozsa: Numerikus tmbt ktfle mdon hozhatunk ltre:
1. Ltezik erre a clra az array() nyelvi elem, melyet az albbi mdon hasznlunk: <?php
$egy_tomb = array (0 => "ez", 1 => "az", 2 => "amaz");
?>
Csak a numerikus tmbknl, ha a tmbindexek folyamatosan kvetik egymst - pl. egyszer listzsnl - ennek a meghatrozsnak ltezik egy rvidebb formja, ahol az indexeket a PHP adja hozz: <?php
$egy_tomb = array ("ez", "az", "amaz");
?>
2. Megadhatjuk a tmbelemeket egyesvel is, szgletes zrjelek hasznlatval: <?php
$egy_tomb[0] = "ez";
$egy_tomb[1] = "az";
$egy_tomb[2] = "amaz";
?>
Meglv tmbhz j elemet is ezzel a szgletes zrjeles formval lehet felvenni: <?php
$egy_tomb[3] = "ez egy j elem";
?>
Ugyanezzel a formval lehet egy tmbelem rtkt fellrni is.
Termszetesen nem szksges az indexeknek folyamatosan kvetnik egymst, azokat tetszs szerint hatrozhatjuk meg. Ha azonban egy j tmbelemnek nem adjuk meg az indext, a PHP automatikusan az abban a tmbben ltez legnagyobb tmbindexnl eggyel nagyobb indexet ad neki. A fenti pldnk teht egyenrtk ezzel: <?php
$egy_tomb[] = "ez egy j elem";
?>
Tmbelemek elrse: A tmbelemeket a tmb nevvel s a keresett tmbelem indexvel lehet elrni (Itt persze mindig szksges megadni a krdezett elem indext is): <?php
print ($egy_tomb[2]); // kirja a 2-es index tmbelem rtkt
?>
Egy tmbelem trlse: A tmb egy elemt az unSet() fggvnnyel (ez is a PHP beptett fggvnye) trlhetjk. Ilyenkor a megmarad tmbelemek indexe nem vltozik meg. <?php
unSet ($egy_tomb[1]); // trljk az 1 index tmbelemet rtkt
?>
fel...
asszociatv tmbk
Az asszociatv tmb elemeinek kulcsa egy karaktersor (string) lehet, a tmbelemek rtke pedig a trolni kvnt adatunk.
Tmb ltrehozsa: Asszociatv tmbt is ktfle mdon hozhatunk ltre:
1. Az array()tnyelvi elem segtsgvel, amely szmos vesszvel elvlasztott kulcs => rtk prt vr. <?php
$egy_tomb = array ("1.kulcs" => "1.rtk", "2.kulcs" => "2.rtk");
?>
Ez egy konkrt pldban gy nz ki: <?php
$egy_tomb = array ( "nev" => "Kiss Bla",
"cim" => "Nekeresdfalva",
"tel" => "06 20/123 456");
?>
2. Ltrehozhatunk tmbt kzvetlen rtkadssal is: <?php
$egy_tomb["nev"] = "Kiss Bla";
$egy_tomb["cim"] = "Nekeresdfalva";
$egy_tomb["tel"] = "06 20/123 456";
?>
Az egyes elemek elrse s trlse mr hasonlan mkdik, mint az egyszer (numerikus) tmbknl.
Egy tmb egyszerre tartalmazhat szmokkal s karaktersorokkal indexel tmbket is - ezeket asszociatv tmbkknt kezelhetjk.
fel...
rekurzv (tbbdimenzis) tmbk
A PHP rugalmassgt mutatja, hogy egy tmbelem maga is lehet egy msik tmb. Ezzel - akr tbb szint mlysgig - sszetett adatszerkezetet is lerhatunk (hacsak magunk bele nem kavarodunk ;-) gy hozhatunk ltre egy tbbdimenzis tmbt: <?php
$fo_tomb = array ( array("egy" => "valami", "ketto" => "akrmi", "harom" => "brmi"),
"valami szveg",
array("piros", "kk", "zld", 15, 21) );
?>
Termszetesen betehetnk egy mr korbban definilt tmbt is egy msik tmbbe: <?php
$belso_tomb = array("egy" => "valami", "ketto" => "akrmi", "harom" => "brmi");
$fo_tomb = array ( $belso_tomb,
"valami szveg",
array("piros", "kk", "zld", 15, 21) );
?>
Itt is elrhetnk minden tmbelemet nllan is. rjuk most ki pldul azt a tmbelemet, aminek a pldban "akrmi", utna azt, aminek "piros" rtket adtunk: <?php
print ($fo_tomb[0]["ketto"]); // kirja, hogy akrmi
print ($fo_tomb[2][0]); // kirja, hogy piros
?>
Ltjuk teht: ez a fentebb ltott szgetes zrjeles meghatrozs, csak mivel itt kt egymsba helyezett tmbrl van sz, kt zrjelre van szksg, amelyek kvlrl befel halad sorrendben vlasztjk ki a keresett tmbelemet.
Gyakori feladat, hogy egy tmb sszes elemt kell kilistzni. Erre kivlan alkalmasak a ciklusok, mint vezrlsi szerkezetek.
A tmbkkel is szmos mveletet lehet vgezni a PHP beptett fggvnyei, vagy az ltalunk rt fggvnyek segtsgvel. Erre nhny gyakorlati pldt itt tallsz. (ez mg nincs ksz...) |