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/