isbandziau tavo varianta, bet gaunasi, kad maniskis siek tiek greitesnis. testavau su 400 irasu ir tiek pat leveliu. tavo Array ( [time] => 1.1615 [memory] => 10168696 [count] => 1 ) mano Array ( [time] => 1.0694 [memory] => 8898936 [count] => 1 ) na, o sukures siek tiek didesni masyva, pvz 1000, servas nuresetina connectiona. beje, as zioplys pries tai uzpjoviau smarkiai, nes testavau su bilekiek irasu, taciau be parentu (parent = 0), o va su parentais - nevalina :) set_time_limit(0) nustatyta, bet springsta del kazko kito. anyway, savishvietos tikslais noriu sukurti dinamini kataloga ir jo valdyma. galbut isvis reiketu nenaudoti rekursijos, o imtis kitokiu priemoniu? jeigu taip, kokia kryptimi ieskoti sprendimo? "Aibo" <aibo@takasno.lt> wrote in message news:op.u8wfomb0ivg7le@vwngienag.net.daily.lt... > Jei mano tūpa galva priimena, tai šitas ciklas per 6000 įrašų > atveju padaro 18003000 iteracijų, > o per 12000 - 72006000 > > Tai gaunasi, kad ~4 kartus ilgiau jį vykdys... > Matyt set_time_limit() reikia daryti didelį. > > > Gal greitesnis variantas būtų iš pradžių pasidarius masyvą tokį: > $parents = array(); > foreach($data as $d) > { > $parents[$d['parent_id']][$d['id']] = $d; > } > > o tada jau > > function get_child($parents, $pid) > { > $tree = array(); foreach($parents[$pid] as $id => $d) > { > $tree[$d['id']] = $d; > if (isset($parents[$id])) > { > $tree[$d['id']]['children'] = $this->get_child($parents, $id); > } > } > } > > matyt yra dar paprastesnis variantas, sito kur parasiau netstavau, gali > buti klaidu > > > > > > On Fri, 26 Feb 2010 19:02:42 +0200, bk <a@a.com> wrote: > >> sveiki, >> >> padariau savo pirmaja rekursija, kuri formuoja multidimensional >> masyva.veikti tai lyg viskas veikia, ale pvz 6000 irasu suka ~20 >> sekundziu, o 12000 - isvis nesulaukiau... >> taigi, kas negerai su sia funckija? slieku savo jegomis daugiau nerandu, >> bo neesu itin geras egzpertas :) >> >> <? >> function get_child($data, $pid = null) { >> $tree = array(); >> foreach( $data as $key => $d ) { >> if( $d['parent_id'] == $pid ) { >> $tree[$d['id']] = array >> ( >> 'parent_id' => $d['parent_id'] >> ); >> unset($data[$key]); >> $children = $this->get_child($data, $d['id']); >> if($children) { >> $tree[$d['id']]['children'] = $children; >> } >> } >> } >> return $tree; >> } >> ?> > > > -- > Using Opera's revolutionary e-mail client: http://www.opera.com/mail/