Autor | Zpráva | ||
---|---|---|---|
robb Profil * |
#1 · Zasláno: 13. 11. 2009, 09:04:23
Mam takovy programatorsky orisek.
Mam dvourozmerne pole (nactene z db, ale na to, nesejde) nasledujiciho tvaru. Muze jit napr. o kategorie v eshopu. Př: (array) Array ( [1] => Array ( [id] => 1 [name] => Kategorie 1 [parent_id] => 0 ) [2] => Array ( [id] => 2 [name] => Podkategorie 1 [parent_id] => 1 ) [3] => Array ( [id] => 3 [name] => Podkategorie 2 [parent_id] => 1 ) [4] => Array ( [id] => 4 [name] => Podpodkategorie 1 [parent_id] => 2 ) ... ) parent_id: odkazuje na kategorii, ktera je rodicem dane kategorie. Nula znamena korenovou kategorii, bez rodice. Strom tedy vypada asi takto: Kategorie 1 ---Podkategorie 1 ------Podpodkategorie 1 ---Podkategorie 2 atd. Jde mi o to, pretvorit jej na n-rozmerne pole, kde pole s kategorii bude obsahovat novy prvek napr. pod klicem subcategories a v nem sve podkategorie: (array) Array ( [1] => Array ( [id] => 1 [name] => Kategorie 1 [parent_id] => 0 [subcategories] => Array ( [2] => Array ( [id] => 2 [name] => Podkategorie 1 [parent_id] => 1 [subcategories] => Array ( [4] => Array ( [id] => 4 [name] => Podpodkategorie 1 [parent_id] => 2 [subcategories] => Array() ) ) ) [3] => Array ( [id] => 3 [name] => Podkategorie 2 [parent_id] => 1 [subcategories] => Array() ) ) ) ) Tzn, ze jiz ze struktury pole bude jasne kdo je komu rodicem a potomkem. Polozek a urovni vnoreni muze byt nekonecno. Pokud nekdo vi jak toto vyresit, budu rad za nakopnuti. Diky |
||
Mike8748_ Profil * |
#2 · Zasláno: 13. 11. 2009, 09:26:55
neni to presne doslova co bys chtel ale rozdil je minimalni
$pole=array(... tvoje pole z DB ...); $vystup=array(); foreach ($pole as $polozka) { if (!array_key_exists($polozka['id'],$vystup) { $vystup[$polozka['id']]['subcat']=array(); $vystup[$polozka['id']]['polozka']=$polozka; $vystup[$polozka['parent_id']['subcat'][$polozka['id']]=&$vystup[$polozka['id']]; } var_dump($vystup[0]); dostanes pole kde kazdej prvek bude obsahovat array('polozka'=>..informace o polozce..,'subcat'=>..pole potomku..) PS:psano z hlavy ale melo by to byt dobre |
||
Mike8748_ Profil * |
#3 · Zasláno: 13. 11. 2009, 09:27:54
oprava 7 radku
$vystup[$polozka['parent_id']]['subcat'][$polozka['id']]=&$vystup[$polozka['id']]; |
||
robb Profil * |
#4 · Zasláno: 13. 11. 2009, 11:10:06
Diky, za zajimave reseni, ale porad to neni ono. Nicmene me to zahadnym zpusobem trklo a vymyslel jsem toto:
Vytvorim si funkci: function menu($pole, $parent_id) { $vystup = false; foreach($pole as $polozka) { if($polozka['parent_id'] == $parent_id) { $vystup[$polozka['id']] = $polozka; $vystup[$polozka['id']]['subcategories'] = $this->menu($pole, $polozka['id']); } } return $vystup; } Kterou pak zavolam: $vysledek = $this->menu($pole, 0); $pole = moje pole kategorii z db A dostanu co jsem potřeboval. |
||
Časová prodleva: 14 let
|
0