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/