Műveletek tömbökkel PHP-ban (Tömb létrehozása, elemek hozzáadása, felülírása, törlése, tömb hosszának megállapítása, elemeinek kiíratása)
Ebben a cikkben a tömbökkel végezhető műveletekkel fogunk megismerkedni PHP nyelv alatt. Bemutatjuk legalapvetőbb tömbműveleteket, mely a létrehozás, a tömbelem hozzáadás és felülírás, továbbá egy picit kevésbé alapvető műveleteket is, mint például a tömb hosszának megállapítása, az összes elem kiíratása vagy a tömb elemeinek törlése. Illetve mindezek előtt megvizsgáljuk, hogy mik is azok a tömbök és az indexek.
Mi az a tömb?
A tömb tulajdonképpen egy olyan speciális változó, amely egyidejűleg több elem tárolására képes. A WikiPédia így definiálja a tömböket: ,,A számítástudományban a tömb (angolul array) olyan adatszerkezet, amelyet nevesített elemek csoportja alkot, melyekre sorszámukkal (indexükkel) lehet hivatkozni.”
Mi az az index?
A fenti definícióban szerepelt egy olyan szó, hogy „indexükkel”, ezt akár úgy is írhatnánk, hogy „sorszámukkal”. Azonban a programozásban sokkal jobban elterjedt kifejezés az index.
A fent látható kép egy tömb felépítését próbálja ábrázolni. Van egy „nyelvek” nevezetű tömbünk, amelynek vannak elemei („HTML”, „CSS”, „JS”), ezeket az elemeket sorszámokkal (0, 1, 2) jelöljük, ezeket a sorszámokat nevezzük indexnek. Láthatjuk, hogy a tömbünk első eleme a “HTML”. Az informatikában a számozás nem egytől, hanem nullától kezdődik! Így az első sorszámunk nem 1, hanem 0 lesz. Azaz a “HTML” elemünket úgy tudjuk elérni, ha lekérjük a “nyelvek[]” tömb nulladik sorszámú, azaz indexű elemét.
Ha a “JS” után szeretnénk berakni egy újabb elemet a „nyelvek” tömbbe, mondjuk a “PHP”-t, akkor az utolsó elem után következő elemre kell hivatkoznunk, jelenesetben a 3. indexre.
Mikor és miért használjunk tömböt?
Akkor érdemes tömböt használnunk, amikor több összefüggő, egymással kapcsolatban álló adatunk van.
Vegyük például a PHP néhány verzióját, ezek a 7.3, a 7.4, a 8.0 és a 8.1.
Ha nem lennének tömbjeink, akkor ezeket az adatokat különböző változókban kellene tárolnunk. Ez így festene:
$verzio1 = 7.3;
$verzio2 = 7.4;
$verzio3 = 7.5;
$verzio4 = 8.0;
$verzio5 = 8.1;
Code language: PHP (php)
Felmerülhet a kérdés sokakban, hogy alapvetően mi ezzel a gond? Hiszen a kód lefut, a változók léteznek, sőt bármelyik értéket le is kérdezhetjük.
Az igazi probléma, akkor van, amikor sokkal több adatunk van, akkor sokkal több időbe telne felvenni minden egyes adat számára egy külön változót. A másik probléma, ami talán még az elsőnél is súlyosabb, az az, hogy mi van, akkor, ha szeretnénk az összes verziószámot megvizsgálni? Írunk egy olyan feltételt, ami a vizsgálandó elemet összehasonlítja az összes változóval? Meglehetne oldani, de az is egy hosszú vagy bonyolult feltétel lenne.
Sokkal egyszerűbb, ha az összefüggő adatokat egy tömbben tároljuk el, hiszen egy tömb összes elemének a megvizsgálása viszonylag egyszerű feladat. Sokkal egyszerűbb és gyorsabb, mint különálló változók értékeit vizsgálgatni.
A fenti példa tömbként megvalósítva így néz ki:
$verziok = array(7.3, 7.4, 7.5, 8.0, 8.1);
Code language: PHP (php)
Tömb létrehozása PHP nyelvben
Ahogy fentebb már látható a PHP nyelvben egy tömb létrehozásához az array() kulcsszót kell használni.
Szintaxis
array(TÖMBELEM1, TÖMBELEM2, TÖMBELEM3 ...);
Code language: PHP (php)
Tetszőleges tömbelemet vehetünk és tölthetünk fel adattal. Arra kell odafigyelni, hogy a létrehozott tömböt eltároljuk egy változóban, amelyet így tehetünk meg:
$TÖMBNÉV = array(TÖMBELEM1, TÖMBELEM2, TÖMBELEM3 ...);
Code language: PHP (php)
Példa tömb létrehozására PHP-ban
PHP kód
<?php
$verziok = array(7.3, 7.4, 7.5, 8.0, 8.1);
?>
Code language: HTML, XML (xml)
Eredmény
Megjegyzés: A tömblétrehozásnak alapvetően nincs kimeneti (output) értéke, azaz grafikusan semmi sem jelenik meg a képernyőn. Mindezek ellenére a háttérben létrejött a tömb.
Tömb elemeinek lekérdezése, kiíratása PHP-ban
Az előző példában létrehoztunk egy tömböt, de nem láttunk belőle semmit. Szerencsére van lehetőségünk arra is, hogy lekérdezzük a tömb elemeit, amelyet akár ki is írathatunk.
Szintaktika
$TÖMBNÉV[TÖMBINDEX];
Code language: PHP (php)
Egy tömb elemét a fenti szintaxissal tudjuk lekérni, de még mindig nem fogjuk látni. Ahhoz, hogy lássuk ki kell íratnunk egy „echo„-val. Természetesen nem csak kiíratni tudjuk, hanem eltárolni egy változóban is, amelynek jelen pillanatban nem sok értelme lenne.
Példa tömb elemének kiíratására PHP-ban
PHP kód
<?php
$verziok = array(7.3, 7.4, 7.5, 8.0, 8.1);
echo $verziok[0] . "<br>";
echo $verziok[1];
?>
Code language: HTML, XML (xml)
Eredmény
7.3
7.4
Megjegyzés: Ha nem fűznék „<br>”-t ponttal (.) a kiíratáshoz, akkor a két tömbelem szóköz nélkül egybeírva jelenne meg.
Tömbelem felülírása PHP-ban
Vannak olyan esetek, amikor szükség van arra, hogy utólag felülírjunk egy tömbelemet, szerencsére a PHP-ban erre is van lehetőségünk.
Szintaxis
$TÖMBNÉV[TÖMBELEM] = ÚJ.ÉRTÉK;
Code language: PHP (php)
Egy tömb elemét a fenti szintaxissal tudjuk lekérni, de még mindig nem fogjuk látni. Ahhoz, hogy lássuk ki kell íratnunk egy „echo„-val. Természetesen nem csak kiíratni tudjuk, hanem eltárolni egy változóban is, amelynek jelen pillanatban nem sok értelme lenne.
Példa tömb elemének kiíratására PHP-ban
PHP kód
<?php
$verziok = array(7.3, 7.4, 7.5, 8.0, 8.1);
echo "Előtte: " . $verziok[0] . "<br>";
$verziok[0] = 7.2; // itt történik a felülírás
echo "Utána: " . $verziok[0];
?>
Code language: HTML, XML (xml)
Eredmény
Előtte: 7.3
Utána: 7.2
Újabb elemek hozzáadása a tömbhöz
Az is egy gyakori eset, hogy egy újabb elemet szeretnénk hozzáfűzni a PHP tömbünkhöz.
Szintaxis
$TÖMBNÉV[] = ÚJ.ELEM;
Code language: PHP (php)
Egy tömb elemét a fenti szintaxissal tudjuk lekérni, de még mindig nem fogjuk látni. Ahhoz, hogy lássuk ki kell íratnunk egy „echo„-val. Természetesen nem csak kiíratni tudjuk, hanem eltárolni egy változóban is, amelynek jelen pillanatban nem sok értelme lenne.
Példa új elem hozzáadására tömbhöz PHP-ban
PHP kód
<?php
$verziok = array(7.3, 7.4, 7.5, 8.0, 8.1);
echo "Előtte: " . $verziok[5] . "<br>";
$verziok[] = 7.2; // itt adok a tömbhöz egy új elemet
echo "Utána: " . $verziok[5];
?>
Code language: HTML, XML (xml)
Eredmény
Előtte:
Utána: 7.2
Tömb hosszának megállapítása
Fentebb említettük, hogy egy tömb összes elemét nagyon könnyű megvizsgálni, ezt elsősorban annak köszönhetjük, hogy a PHP tartalmaz egy beépített függvényt, amely visszaadja a tömb hosszát, azaz azt, hogy hány elemet tartalmaz. Ha tudjuk a hosszát, akkor már nagyon könnyű egy ciklusban végigjárni az összes elemét.
Szintaktika
count($TÖMBNÉV);
Code language: PHP (php)
Ez a függvény csak a tömb hosszának kiszámítását és visszaadását oldja meg, a kiíratásról nekünk kell gondoskodnunk.
Példa count() használatára PHP-ban
PHP kód
<?php
$verziok = array(7.3, 7.4, 7.5, 8.0, 8.1);
echo count($verziok);
?>
Code language: HTML, XML (xml)
Eredmény
5
Összes elem kiíratása
Az összes elem kiíratására több lehetőségünk is van, amikor csak szeretnénk látni, hogy hogyan fest egy tömb, azaz, hogy milyen indexen milyen elemek vannak, akkor elegendő a var_dump() függvény használata, azonban, ha valami mást is szeretnénk a tömb elemeivel csinálni, például vizsgálatokat végezni, akkor egy másik megoldásra lesz szükségünk.
var_dump() szintaxis
vardump($TÖMBNÉV);
Code language: PHP (php)
Egy tömb elemeit a fenti szintaxissal tudjuk lekérni.
Példa var_dump használatára PHP-ban
PHP kód
<?php
$verziok = array(7.3, 7.4, 7.5, 8.0, 8.1);
var_dump($verziok);
?>
Code language: HTML, XML (xml)
Eredmény
array(5) {
[0]=>
float(7.3)
[1]=>
float(7.4)
[2]=>
float(7.5)
[3]=>
float(8)
[4]=>
float(8.1)
}
A var_dump először is megmutatja, hogy hány elemű tömbről van szó, ezt jelöli az „array(5)”, majd elkezdi kilistázni az elemeit. A nulladik indexet [0]-val jelöli, majd jön a „=>” jelölés és az, hogy ezen az indexen milyen típusú (float) és értékkel bíró adat van. Természetesen a tömb összes elemét kilistázza.
Tömb összes elemének kiíratása úgy, hogy lehetővé tegyük a vizsgálatot
A var_dump egy kiváló megoldás abban az esetben, amikor csak önmagunkat szeretnénk ellenőrizni, hogy jól töltöttük-e fel adatokkal a tömböt. De nem alkalmas arra, hogy egyesével bejárjuk a tömb elemeit, sőt akár vizsgálatot tegyünk rájuk vonatkozólag.
Tömb bejárása foreach ciklussal
A foreach használata azért nagyszerű, mert használatával egy asszociatív tömböt is képesek vagyunk bejárni, azaz egy olyan tömböt, amely nem csak számmal leírt indexhelyén tartalmaz adatot, hanem olyan indexű helyeken is, amelyek számmal nem meghatározhatóak.
Példa összes elem kiíratására foreach ciklussal PHP-ban
PHP kód
<?php
$verziok = array(7.3, 7.4, 7.5, 8.0, 8.1);
foreach ($verziok as $elem) {
echo $elem . "<br>";
}
?>
Code language: HTML, XML (xml)
Eredmény
7.3
7.4
7.5
8
8.1
Tömb bejárása while ciklussal
Ha nem asszociatív tömbünk van, azaz a tömbünkbe az összes elem olyan indexű helyen szerepel, ami számmal is leírható, akkor nyugodtan használhatunk más ciklusfajtát is, például while-t.
Ahhoz, hogy egyesével, elemről elemre járjuk be a tömböt egy while ciklussal, szükségünk lesz a fent tanult count()-ra, illetve ismernünk kell hozzá a ciklusokat is.
Példa összes elem kiíratására while ciklussal PHP-ban:
PHP kód
<?php
$verziok = array(7.3, 7.4, 7.5, 8.0, 8.1);
$szamlalo=0; // készítünk egy számlálót, ezzel jelöljük, hogy melyik indexű elemnél járunk
while($szamlalo<count($verziok)) // addig megy a ciklusunk, amíg a számlálónk kisebb, mint ahány elem van összesen
{
echo $verziok[$szamlalo] . "<br>"; // kiíratjuk a $verziok tömb $szamlalo indexű elemét
$szamlalo++; // növeljük a számlálót
}
?>
Code language: HTML, XML (xml)
Eredmény
7.3
7.4
7.5
8
8.1
A megoldás egy picit komplikáltnak tűnik és csak akkor használható, amikor indexált tömbről van szó, de valójában egy nagyon egyszerű kis megoldás arra, hogy kilistázzuk egy tömb összes elemét. Azért nagyon jó ez a megoldás, mert a ciklus belsejébe simán tehetünk vizsgálatokat és ahhoz köthetjük a kiíratást. Szóval így akár egy szétválogatást is megtudunk valósítani.
Nézzük meg akkor a fenti kódrészlet magyarázatát. Szóval van egy tömbünk kiindulásnak. Majd készítünk egy számlálót, amelyet nullától indítunk. Ezzel a számlálóval fogjuk nézni azt, hogy hanyadik elemnél járunk a tömbben.
A while ciklus addig megy, amíg a $szamlalo névre hallgató változónk értéke kisebb, mint a tömbünk elemeinek száma. Alapesetben 0 a számlálónk, a tömbünk hossza pedig 5. Szóval nulla kisebb, mint öt, így bemegyünk a ciklusba, ahol kiíratjuk a $verziok tömb $szamlalo indexű elemét, azaz a $verziok nulladik elemét, amihez hozzáfűzűnk egy sortörést, hogy a végeredmény jobban nézzen ki. Ezután növeljük a számlálót, hogy a következő ciklusvizsgálatnál a számláló már 1 legyen. Ilyenkor ezt vizsgálja meg a ciklus: 1<5? Ha igaz, akkor belép. Eljutunk addig, míg a számlálónk értéke négy lesz, kiíratjuk azt is, majd következik, hogy a számlálónk értéke 5. A ciklus fejében megvizsgáljuk, hogy öt kisebb-e, mint 5 vagy sem. Öt nyilvánvalóan nem kisebb, mint öt, mert ugyanannyi a két érték, így a program nem fog belépni a ciklusba, azaz végeztünk az elemek kiíratásával.
Tömb és tömbelem törlése PHP-ban
Természetesen lehetőségünk van arra is, hogy töröljünk egy tömbelemet vagy akár egy teljes tömböt is.
Szintaktika
unset(TÖMBNÉV VAGY TÖMBNÉV[TÖMBELEM]);
Code language: CSS (css)
Az unset függvénnyel van lehetőségünk tömbelemet vagy teljes tömböt törölni, a szintaxis csak annyiban tér el, hogy ha a teljes tömböt szeretnénk törölni, akkor nem kell indexet írnunk, míg ha csak egy konkrét elemet szeretnénk törölni, akkor jeleznünk kell, hogy melyik indexű elemet szeretnénk törölni.
Példa unset() használatára PHP-ban
PHP kód
<?php
$verziok = array(7.3, 7.4, 7.5, 8.0, 8.1);
echo "Törlés előtt: ";
echo var_dump($verziok[0]) . "<br>";
unset($verziok[0]); // itt történik a törlés
echo "Törlés után: ";
echo var_dump($verziok[0]) . "<br>";
?>
Code language: HTML, XML (xml)
Eredmény
Törlés előtt: float(7.3)
Törlés után: NULL