David Sky wrote:
Hey,

Can't use your example, as you check weather
$sorted is empty, if it is -> run the foreach and return,
but on next recursion when it's not empty - do nothing :)

Though I found how to cut a few seconds (on very big array),
removing the first if, and adding a $return=true to functions'
parameters, and in future calls set it to false:

function recur($array, &$sorted=array(), $pid=0, $level=0, $return=true)
{
                foreach($array as $id=>$parent)
                {
                        if($pid===$parent)
                        {       
                                $sorted[$id]= $level;
                                unset($array[$id]);
                                if(in_array($id,$array)){
                                        recur($array, &$sorted, $id, $level+1, 
false);
                                }
                        }
                }
                if($return){return $sorted;}
}


Well, I guess that's it, I'm sure I can think of
another way to cut execution time, but, well,
I don't have much time for it :)


Why are you returning anything at all? I mean, you are making your function call like this right?

$dataOut = recur($dataIn, array(), 3);

You are passing the second argument as a reference already, why not keep it that way at the top level. Do this instead.

recur($dataIn, $dataOut, 3);


Now, from what you function looks like, it would return $sorted through the reference $dataOut.

Then you can get rid of the extra if($return){return $sorted;} thing. Remove the last argument from the function definition and you should now be a little faster also.


Thanks all!

David.


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to