Tema: Re: rekursija
Autorius: bk
Data: 2010-03-08 16:18:33
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/