Többdimenziós tömbök objektummá alakítása


Bizonyára sokszor megesett már veletek is, hogy egy végtelen nagyságú tömböt objektummá szerettetek volna alakítani.  Ez a megoldás rendkívül hasznos,  s gyakran felhasználható több területen is. 

A lényeg egy rekurzív függvény, mely bejárja a tömböt, s ha az elem is egy tömb, rekurzívan meghívódik a függvény az aktuális elemre. Abban az esetben, ha az elem nem tömb, az újonnan létrehozott objektumunknak egy attribútuma lesz az éppen aktuális elem. 

De akkor lássuk is a konkrét megoldást.

Feltételezzük, hogy van egy tömbünk:

1
2
3
4
5
6
7
8
9
10
11
$a = array(
   'a'=>'test1',
   'b'=>'test2',
   'c'=>array(
      'd'=>'2',
      'e'=>'3',
      'f'=>array(
         'g'=>'q',
         'h'=>'ff')
      )
  );

A tömböt a következő függvénnyel alakíthatjuk át a kívánt objektummá:

1
2
3
4
5
6
7
8
9
10
11
12
function arrayToObject($arrResult){
$return = new stdClass();
foreach ($arrResult as $key => $value){
if (is_array($value)){
$return->$key = arrayToObject($value);
}
else {
$return->$key = $value;
}
}
return $return;
}

Ahhoz, hogy leellenőrizzük, hogy minden rendben történt, a következő kódrészletet használhatjuk:

1
2
3
$b = arrayToObject($a);
print_r($b);
print (isset($b->c->f->g))?$b->c->f->h:'Nem';

Ez a kis függvény rendívül hasznos lehet mikor az adatbázisból kinyert adatokat nem mind többdimenziós asszociatív tömb szeretnénk feldolgozni.

Remélem mindenki megértette, hogy milyen előnyökkel jár a tömbök objektummá alakítása.

Kellemes kódolást a továbbiakban!

Kapcsolódó bejegyzések:
  • Néha jól jöhet, ha tudjuk, hogy egy-egy függvényünket milyen környezetből (milyen függvényből, mely osztály mely metódusából, melyik fájlból stb.) hívták meg. Eb …

  • Személy szerint már sokszor jártam úgy, hogy egy eredményt, ami várhatóan egy tömb volt be kellett járja. Ilyen esetekben általában meg szoktuk vizsgálni, hogy a …

  • A PHP nyelvről szóló sorozatunknak ebben a részében a tömböket fogom bemutatni. A PHP tömb vagy eredeti nevén array egy úgynevezett összetett változó típus. Az ö …

  • A következőkben egy olyan, általam írt PHP-s függvényt szeretnék bemutatni, amellyel könnyedén és egyszerűen készíthetünk magunknak olyan oldalt, amely támogatja …

  • Ha PHP-GD-vel készítesz képeket és egyszerűbb filtereket (szürkeárnyalatosítás, blur, színárnyalat-eltolás) szeretnél használni jól jöhet ez a kód. Ezen kívül a …

A cikket beküldte: Gombos Lorand (http://)

5 hozzászólás

  1. hszilard says:

    Bocsánat a kérdésért, de a stdClass osztálynak hol van a deklarációja?

    Üdv.: hszilard

  2. gomby says:

    Az std osztalynak nincs deklaracioja, vagis van de az resze a standard php keretnek. Ez a standard osztaly azaz letrehoz egy ugmond ures osztalyt. Ennek az a gyakorlati haszna, hogy atributainak erteket adsz, s majd az egesz objektumot tovabbitod parameterkent, vagy akarmire fel lehet hasznalni. Sajnos most csak ilyen szukszavuan tudok vallaszolni de kesobb reszletesen irok.
    Hello, tovabbi jo kodolast.

  3. hszilard says:

    Köszi a választ!
    Lehet, hogy hasznos lenne egy külön cikk a stdClass osztály felhasználási lehetőségeiről :)

  4. gomby says:

    Vegigolvastam az elobbi bejegyzesemet, s en is meglepodtem rajta, hogy mennyire helytelenul irok. Vedekezesul annyit hoznek fel hogy telefonrol irtam a vallaszt :). Szerintem is jo otlet az stdClass felhasznalasi lehetosegeirol irni egy kis cikket, mar csak azert is, mert ugy alaposan en sem foglalkoztam a problemaval.
    Egy kicsit utanna fogok nezni a dolgoknak, utannaolvasok, atnezem a kodjaimat, hogy hol es miert hasznaltam, s egy kis cikket fogok megfogalmazni belolle.
    Addig is akinek vannak tapasztalatai az stdClass felhasznalasi lehetosegeivel, az nyugodtan irjon ide.
    Tovabbi jo kodolast.

  5. Ubuntus says:

    “Ez a kis függvény rendívül hasznos lehet mikor az adatbázisból kinyert adatokat nem mind többdimenziós asszociatív tömb szeretnénk feldolgozni.”

    Vagy, ha szimplán a mysql_fetch_object-et használjuk.

Szólj hozzá
a Többdimenziós tömbök objektummá alakítása c. bejegyzéshez

- Engedélyezett HTML elemek: <a> <em> <strong> <ul> <ol> <li>
- Forráskód beküldéséhez tedd a kódot ezek közé: <pre lang="php" line="1">Kódrészlet helye itt</pre>