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!

5 HOZZÁSZÓLÁS

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

    Üdv.: hszilard

  2. 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. 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. 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. „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.

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét