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!
Bocsánat a kérdésért, de a stdClass osztálynak hol van a deklarációja?
Üdv.: hszilard
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.
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 :)
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.
„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.