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:
$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á:
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:
$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!
Harder
Profil
Korábbi hozzászólások (5)
A régi blogon érkezett hozzászólások archívuma. Új hozzászólást már nem lehet írni.
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.
Van hozzáfűznivalód? Írj nekem közvetlenül.
Kapcsolat