Tema: Re: rekursija
Autorius: Aibo
Data: 2010-03-01 19:19:12
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/
3Dastronomyagricultureaudioautosautos.audiautos.audioautos.binariesautos.bmwautos.clubautos.fordautos.hondacrxautos.japanautos.mercedesautos.opelautos.sportautos.volvoautos.vwaviaavia.binariesbankcardsbinariesbooksbuildingcinemacommercecomp.hardwarecomp.softwarecomp.lietuvinimascomp.networksculturedarbas.ieskaudarbas.siulaudesigneconomicselectronicsfaunafauna.aquafauna.binariesfishingflorafotofoto.binariesgamesgames.csgames.onlinegsmgurmanaihumourhumour.binariesinternetlawmicrosoftmotomusicmusic.binariesmusic.instrumentsmusic.LT.binariesnavigacijaphppoliticsprogrammingrpgsportstudyingsveikatatalktesttranslationtransportationtraveltravel.binariestvunixvideovideo.binarieswatersportswwwwww.flashpdaautos.supermama.ltmobiledarbasretro.3Dretro.agricultureretro.astronomyretro.audioretro.autosretro.autos.audiretro.autos.audioretro.autos.binariesretro.autos.bmwretro.autos.clubretro.autos.fordretro.autos.hondacrxretro.autos.japanretro.autos.mercedesretro.autos.opelretro.autos.sportretro.autos.supermamaretro.autos.supermama.ltretro.autos.volvoretro.autos.vwretro.aviaretro.avia.binariesretro.bankcardsretro.beosretro.binariesretro.booksretro.buildingretro.cinemaretro.commerceretro.compretro.comp.hardwareretro.comp.lietuvinimasretro.comp.networksretro.comp.softwareretro.cultureretro.darbasretro.darbas.ieskauretro.darbas.siulauretro.designretro.economicsretro.electronicsretro.e-vejasretro.faunaretro.fauna.aquaretro.fauna.binariesretro.fishingretro.floraretro.fotoretro.foto.binariesretro.gamesretro.games.csretro.games.onlineretro.games.rpgretro.genealogijaretro.gsmretro.gurmanairetro.humourretro.humour.binariesretro.internetretro.YZFretro.YZF.nebukretro.YZF.nebuk.netikintisretro.YZF.nebuk.netikintis.bukretro.YZF.nebuk.netikintis.buk.tikintisretro.lawretro.microsoftretro.mobileretro.motoretro.musicretro.music.binariesretro.music.instrumentsretro.music.LTretro.music.LT.binariesretro.navigacijaretro.newsretro.news.taisyklesretro.newuserretro.pdaretro.phpretro.politicsretro.programmingretro.rpgretro.sportretro.studyingretro.sveikataretro.talkretro.translationretro.transportationretro.travelretro.travel.binariesretro.tvretro.unixretro.videoretro.video.binariesretro.watersportsretro.wwwretro.www.flashdiylt.rkm.news.announcelt.rkm.news.newuser