[php] tree generatie testen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben paar uur bezig geweest om een manier te ontwikkelen om makkelijk een tree te genereren (en de volgorde waarin de tree gebladert moet worden). Alleen nu zie ik nergens op GOT zoiets soortgelijks, dus mij vraag, hoe test ik of dit een goeie, snelle, en foutloze methoden is? ik heb het volgende geprobeert.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?

$count = 1000;

for( $i=1; $i<$count; $i++)
{
    $node[$i] = Array(  "nodeid"        => $i,
                            "parentid"      => rand(0, $i),
                            "info"          => "hoi"
                    );
}

$tree['0'] = gettree($node, 0);

$startTime = getmicrotime();

function gettree($node, $id)
{
    global $count;
    
    for( $i = 1; $i < $count; $i ++ )
    {
        if( $node[$i]["parentid"] == $id )
        {
            addtree( $node[$i]["nodeid"] );

            $return[ $node[$i]["nodeid"] ] = gettree($node, $node[$i]["nodeid"]);

            $return[ $node[$i]["nodeid"] ]["info"] = $node[$i]["info"];
        }
    }

    return $return;

}

function addtree($id)
{
    global $flattree, $node;

    $flattree[$id] = $node[$id]["info"];
}

function getmicrotime() {
    /* I got this getmicrotime()-function from the PHP.net website, but it seems to be
       buggy, while it sometimes displays a negative execution time when you substract
       the current time with the starting time of the script... I only noticed it at
       my Windows localhost machine, not on Linux servers. Is anybody familiar with this
       behaviour? Any information about this is welcome at nvie@users.sourceforge.net
       for your co-operation. */
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

echo "<p></p>" . round(getmicrotime() - $startTime, 5);

print_r($tree);

print_r($flattree);

?>


nu lijkt dit wel te werken .. maja, ik ben niet echt een super programmeur ofzo.. dus twijfel ik of ik goed bezig ben.. de script genereert wel in 0.00019.

ik zocht dus een manier om niet meerdere query's uit te voeren, wat ik nu dus doe, is ik geeft alle item's een opeen volgend nummer en de nummer van node of parentnode maakt niet uit...

vraag is dus.. hoe test ik of deze script goed en efficient is? dingen als geheugen problemen niet voordoen als ik het veel ga gebruiken enz.

[ Voor 26% gewijzigd door Verwijderd op 12-01-2004 03:10 . Reden: te snel verstuurd.. ]


Acties:
  • 0 Henk 'm!

  • 4VAlien
  • Registratie: November 2000
  • Laatst online: 24-06 09:47

4VAlien

Intarweb!

Als het echt een tree is kan je dan niet beter in elke node een array met de child nodes opnemen?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
4VAlien schreef op 12 januari 2004 @ 03:18:
Als het echt een tree is kan je dan niet beter in elke node een array met de child nodes opnemen?
zou wel een idee zijn, maar heb ik zelf niet nodig en zou ook niet weten hoe te implementeren, nu genenreert hij een hirarchische tree. Maar hoe ik de client's elke keer zou moeten verzamelen :S zou het niet weten..

[ Voor 36% gewijzigd door Verwijderd op 12-01-2004 03:34 ]


Acties:
  • 0 Henk 'm!

  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 14:15

BrZ

Verwijderd schreef op 12 januari 2004 @ 03:06:
de script genereert wel in 0.00019.
Je roept de functie aan voordat je $startTime een waarde geeft. Tussen die starttime en de tijd weergeven staat eigenlijk niets (nou ja, de functies staan er gedefinieerd, maar die worden niet op die volgorde uitgevoerd)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nu heb ik alles geprobeert te optimaliseren, maar toch lijkt het mij niet echt efficient om ruim 9900 keer een row in een array van 100 rows te checken.

het volgende heb ik gemaakt, maar nu snap ik echt niet hoe dit te optimaliseren... hoe kan ik sneller bepalen welke node bij welke parent hoort? Het gaat vooral op de getTree methode...

http://www.advany.com/Tree.Class.php (geruned)

http://www.advany.com/Tree.Class.phps source