[PHP] Array laaste waarde opzoeken?

Pagina: 1
Acties:
  • 139 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo ik zit met een probleem,
ik heb een assoatieve array en daar staan meerdere gegevens in.
deze is dus ook recursief gemaakt zodat ik een tree kan krijgen die oneindig diep gaat.
Maar nu wil ik weten wanneer het einde is van een deel van het array.
code:
1
2
3
4
5
6
+- 1.node1
|   +- node1.subnode1
|   +- node1.subnode2
|   |_ node1.subnode3// einde van array[1][3]
|_ 2.node2 // einde van de eerste array[2]
    |_ node2.subnode2// einde van array[2][1]

ik dacht aan iets van max($node[]) maar weet iemand een betere methode of ideeén.

ik wil namelijk een tree maken die er net zo leuk uitziet als bij explorer, alleen lukt mij dit niet helemaal.

Acties:
  • 0 Henk 'm!

  • Sosabowski
  • Registratie: Juni 2003
  • Laatst online: 18-09 21:03

Sosabowski

nerd

Waar het op neer komt:

Je maakt en functie ShowSubNodes(node). In die functie zoek je de subnodes van de node, voor iedere roep je weer de functie aan. :)

The whole problem with the world is that fools and fanatics are always so certain of themselves, and wiser people so full of doubts. -- Bertrand Russell


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
IorGie schreef op 20 februari 2004 @ 13:47:
Waar het op neer komt:

Je maakt en functie ShowSubNodes(node). In die functie zoek je de subnodes van de node, voor iedere roep je weer de functie aan. :)
Daarmee weet ik toch niet wanneer het einde is berijkt van een subnode, het gaat niet zo zeer dat hij verder gaat met de volgende node, maar ik wil eigelijk weten hoe het mogelijk is om de laaste node te weten in een array zodat die dan met een bepaalde functie het Einde of Tstuk kan bepalen.

dus eigelijk je hebt een array '1', '2' enz. hoe kan ik weten dat 2 bereikt is, en dat daar een melding van gemaakt wordt.. heb hier al een tijdje over zitten nadenken. kom er alleen niet uit. |:(

Acties:
  • 0 Henk 'm!

  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:39
Lijkt me dan sowieso mooier om het níet recursief te doen, maar (dubbel) iteratief: een while-lusje om alle node's te doorlopen met daarin een while-lusje om alle subnode's te doorlopen. Of je moet ook nog subsubnode's en nog dieper hebben, dan is het misschien wel verstandig om het recursief te doen.

En sorry, ik heb verder geen verstand van PHP om te kijken wanneer je het eind van de array bereikt hebt...

[ Voor 19% gewijzigd door riezebosch op 20-02-2004 14:27 ]

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
end() doet dit toch?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
riezebosch schreef op 20 februari 2004 @ 14:25:
Lijkt me dan sowieso mooier om het níet recursief te doen, maar (dubbel) iteratief: een while-lusje om alle node's te doorlopen met daarin een while-lusje om alle subnode's te doorlopen. Of je moet ook nog subsubnode's en nog dieper hebben, dan is het misschien wel verstandig om het recursief te doen.

En sorry, ik heb verder geen verstand van PHP om te kijken wanneer je het eind van de array bereikt hebt...
Nee het is recursief, dus oneindig.
Uhh ik zal eens kijken maar ik ben het niet eerder tegengekomen.
okay dit is echt 8)7 8)7 ik kijk dus even naar end()
php end() en dit is denk ik de oplossing, al weet ik dat natuurlijk niet zeker.
/me gaat sleutelen.

[ Voor 15% gewijzigd door Verwijderd op 20-02-2004 14:58 . Reden: linkje toegevoegd ]


Acties:
  • 0 Henk 'm!

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 06:58
je kan ook een count() doen van de array waarin de subnodes staan, en vervolgens in je loop een teller mee te laten lopen. zodra deze gelijk zijn = laatste node

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
-lama-

[ Voor 89% gewijzigd door Skaah op 20-02-2004 19:08 ]


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Je zou zelfs de array om kunnen draaien en dan het eerste item pakken, maar dat lijkt me niet zo efficient als end() ;)

Acties:
  • 0 Henk 'm!

Verwijderd

twiekert schreef op 20 februari 2004 @ 16:15:
je kan ook een count() doen van de array waarin de subnodes staan, en vervolgens in je loop een teller mee te laten lopen. zodra deze gelijk zijn = laatste node
Ik ga even onder een andere naam door... ik ben oop spucky :D
Maar hoe denk je dan erachter te komen dat je de laaste record te pakken hebt.

Ik kan me er nie helemaal in inbeelden hoe hij dat zou moeten weten.
Kan jij misschien meer uitleg daar over geven.
of mogelijk een voorbeeld van hoe je dat zou doen.

Acties:
  • 0 Henk 'm!

  • twiekert
  • Registratie: Februari 2001
  • Laatst online: 06:58
Verwijderd schreef op 20 februari 2004 @ 22:08:
[...]


Ik ga even onder een andere naam door... ik ben oop spucky :D
Maar hoe denk je dan erachter te komen dat je de laaste record te pakken hebt.

Ik kan me er nie helemaal in inbeelden hoe hij dat zou moeten weten.
Kan jij misschien meer uitleg daar over geven.
of mogelijk een voorbeeld van hoe je dat zou doen.
beetje laat, maar beter als nooit :P

de tree die ik gemaakt hebt ziet er zo uit:
PHP:
1
2
3
4
$nodes[1][1] = 'dit is de categorie 1';
$nodes[1][2] = 'dit is de categorie 2';
  $nodes[2][1] = 'dit is de categorie 2-1 ';
$nodes[1][3] = 'dit is de categorie 3';


de eerste key is het parentid, de tweede key is het childid. een child kan ook weer parent zijn zoals node [1][2], omdat deze ook weer als parent ($nodes[2][1]) ingevoerd is.

de volgende code gebruik ik om het spul op het scherm te zetten, ik heb het een en ander eruitgeknipt om het wat simpeler te houden.

ik heb ook het een en ander maar van commentaar voorzien, dat zat er nog niet in want ik ben nogal lui :+
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
<?
function GetTree($parentid, $level = 0) {
    
    $i=0;

    //count van child/parent nodes van huidige node
    $nodecount = count($this->Tree[$parentid]); 

    //loop door de array om nodes van parent op te halen
    foreach ($this->Tree[$parentid] as $key => $value) 
    { 
        //als de counter $i gelijk is aan het 
        totaal aantal nodes van de huidige parent dan is het een lastnode
        if ( ($i+1) == $nodecount ) { 
            $type = "lastnode";

        }   else {
            $type = "";
        }

        echo $value;

        /*als de huidige node een parentnode is,
        dus als deze bestaat als eerste key in de $Tree array, 
        start de recursieve functie opnieuw.*/

        if (isset($this->Tree[$key])) {             
        $this->GetTree($key, $level + 1);
        }

        $i++;
    }
}
?>


met dit stukje code weet je dus of je aan het eind van de array bent (=last node) :)
PHP:
1
2
3
4
5
6
7
8
       //als de counter $i gelijk is aan het 
       // totaal aantal nodes van de huidige parent dan is het een lastnode 
        if ( ($i+1) == $nodecount ) { 
            $type = "lastnode"; 

        }    else { 
            $type = ""; 
        }

[ Voor 4% gewijzigd door twiekert op 23-03-2004 17:09 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:43
Uhm, ik snap de helft van dit topic niet, maar waarom gebruikte je niet direct al een geneste array?

PHP:
1
2
3
4
5
6
7
8
9
$tree = array(
    'Hoofd1' => array(
        'Foo'    => NULL,
        'Bar'    => NULL,
        'Baz'    => NULL ),
    'Hoofd2' => array(
        'Qux'    => NULL,
        'Quux'   => NULL,
        'Quuux'  => NULL ) );

En dan recursief doorlopen zoals riezebosch doorlopen? Of weet je niet hoe dat werkt?

edit:
Oh hee; jij bent de TS helemaal niet. Niet heel zinvolle kick dan, IMHO.

[ Voor 58% gewijzigd door Soultaker op 23-03-2004 21:07 ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Dat is inderdaad de oplossing die de TS zoekt denk ik. Je zou dan ook nog eens kunnen controleren op het level van recursie om een bepaalde actie uit te voeren als een een niewe node uit de onderste laag wordt doorlopen. Ik denk niet dat het anders beter te doen is.

[ Voor 51% gewijzigd door Michali op 23-03-2004 20:17 ]

Noushka's Magnificent Dream | Unity

Pagina: 1