Tree-Rangliste...oberster Knoten merkt sich Werte nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Tree-Rangliste...oberster Knoten merkt sich Werte nicht

    Es geht um ein Modul, dass ich gerade programmiere.

    Ich benutze PHP Version 4.4.2

    ich versuche einen tree aufzubauen.

    hier die klasse

    wird folgendermassen instanziert:

    $irgendwas = new leaguePosition([z.b. 4], null)

    PHP-Code:
    class leaguePosition{
        
    //referenz auf vorherige leaguePositionen
        
    var $childleaguePosition null;
        
    //referenz auf parent
        
    var $parentleaguePosition null;
        
    //actual Team
        
    var $teamOnPos null;
        
    //derzeit größter vergebene rang
        
    var $maxSetPlace 0;
        
        function 
    leaguePosition($depth$parentPos){        
            
    $this->parentleaguePosition $parentPos;
            if(
    $depth>1){
                
    $this->childleaguePositions[0] = new leaguePosition($depth-1,$this);
                
    $this->childleaguePositions[1] = new leaguePosition($depth-1,$this);
            }
            elseif (
    $depth==1){
                echo 
    $this->getMaxSetPlace();
            }
        }
        
        function 
    getMaxSetPlace(){
            if(
    $this->parentleaguePosition == null){
                
    $this->maxSetPlace++;
                return 
    $this->maxSetPlace;
            }
            else {
                return 
    $this->parentleaguePosition->getMaxSetPlace();    
            }
        }

    das problem. JEDE der untersten childobj. sollen einen wert aus der dem obersten parentobj. bekommen.

    der tree wird rekursiv aufgebaut und um den wert zu erhalten wird solange die parent knoten durchsucht bist der oberste erreicht ist.

    jedoch gibt er mir immer nur 11111111 aus?!?!?!?

    ich versteh einfach nicht wieso der oberste knoten sich den wert nicht merkt.

    thx für hilfe =D
    Zuletzt geändert von Phrozen; 06.03.2006, 22:07.

  • #2
    und du erwartest was? 10000000?

    Kommentar


    • #3
      ich will im grunde einen zähler für die untersten knoten


      ich erwarte mir in meinem fall wenn einen tree mit einer tiefe von 4 wobei jeder knoten 2 childs hat:

      echo "12345678"

      da ich 8 basisknoten habe

      ich dachte es wär das einfachste eine variable im obersten zu haben von der jeder basisknoten den wert erhalten kann.
      Zuletzt geändert von Phrozen; 06.03.2006, 21:11.

      Kommentar


      • #4
        warum speicherst du diese id nicht als eigenschaft einer jeden instanz?

        Kommentar


        • #5
          das hatte ich auch in weiterer folge vor

          aber wie soll ich denn eine id speichern wenn mein fortlaufender zähler sich den wert nicht speichert

          Kommentar


          • #6
            So betrunken wie ich grad bin...

            Kann es sein dass er maxSetPlace nur erhöht wenn kein parent vorhanden ist, also höchstens 1 mal, beim 1sten Knoten? Müsste das nicht umgekehrt lauten? if($this->parentleaguePosition != null)


            edit: erhöht der den wert überhaupt? Wo übergibt der denn den erhöhten wert?

            Kommentar


            • #7
              nein, wenn, dann soll der wert bei der rekursion erhöht werden.
              PHP-Code:
              return $this->parentleaguePosition->getMaxSetPlace() + 1
              aber ich denke, man kann es sinnvoller verwenden, wenn man die id zu jeder instanz speichert. und im konstruktor soetwas wie
              PHP-Code:
              $this->id $parentPos->id 1
              einbaut.

              Kommentar


              • #8
                luke: na dann prost =)

                erhöht wird der wert bei $this->maxSetPlace++;

                es soll auch nur erhöht werden wenn keiner vorhanden ist. in meinem bsp ist er der top knoten. vondem aus jeder unterste child knoten einen wert erhält und den im top knoten erhöt.

                penizillin:
                PHP-Code:
                class leaguePosition{
                    
                //referenz auf vorherige leaguePositionen
                    
                var $childleaguePosition null;
                    
                //referenz auf parent
                    
                var $parentleaguePosition null;
                    
                //actual Team
                    
                var $teamOnPos null;
                    
                //derzeit größter vergebene rang
                    
                var $maxSetPlace 0;
                    
                //id
                    
                var $id null;
                    
                    function 
                leaguePosition($depth$parentPos){        
                        
                $this->parentleaguePosition $parentPos;
                        if(
                $depth>1){
                            
                $this->childleaguePositions[0] = new leaguePosition($depth-1,$this);
                            
                $this->childleaguePositions[1] = new leaguePosition($depth-1,$this);
                        }
                        elseif (
                $depth==1){
                            
                $id $this->getMaxSetPlace();
                            echo 
                $id;
                        }
                    }
                    
                    function 
                getMaxSetPlace(){
                        if(
                $this->parentleaguePosition == null){
                            
                $this->maxSetPlace++;
                            return 
                $this->maxSetPlace;
                        }
                        else {
                            return 
                $this->parentleaguePosition->getMaxSetPlace();    
                        }
                    }

                Da ich nur für die untersten knoten eine id benötige sollte der tree ca so ausschauen
                PHP-Code:
                 oberster knoten
                       3       3
                     2   2   2   2
                    1 1 1 1 1 1 1 1
                ids 1 2 3 4 5 6 7 8 
                und der zähler, so habe ich mir das halt vorgestellt, läuft im obersten knoten ab.

                Kommentar


                • #9
                  erhöht wird der wert bei $this->maxSetPlace++;
                  nur ein mal, und das für den root - deswegen bliebs bei 111111111.

                  wenn du aber eine eigenschaft "id" implementierst, so kümmere dich darum, dass sie im konstruktor für alle gesetzt wird, von der des parents ausgehend.

                  Kommentar


                  • #10
                    Hi,

                    Ich habe deine Klasse oben genommen und erhalte bei 4: 12345678
                    Das ist doch das was du wolltest?
                    Oder seh ich da was falsch?

                    Gruß Thomas

                    €: Ich seh grad du hast geeditet
                    Zuletzt geändert von Alrik; 06.03.2006, 21:45.

                    Kommentar


                    • #11
                      na das finde ich aber klasse...

                      warum auch immer es bei dir funktioniert...

                      welche php vers. hast du?
                      apche?
                      php.ini einstellungen?


                      *ratlos sei*

                      Kommentar


                      • #12
                        Hast du das oben nicht umgeändert?

                        Apache/2.0.54 (Win32) mod_ssl/2.0.54 OpenSSL/0.9.7g PHP/5.0.4

                        An der ini hab ich nichts verändert, außer die register_globals = off.

                        Kommentar


                        • #13
                          kann das tatächlich PHP 5 sein, was bei mir den fehler hervorruft?!?!?!?
                          Zuletzt geändert von Phrozen; 06.03.2006, 22:02.

                          Kommentar


                          • #14
                            problem solved:

                            Lösung: Umstieg von PHP 4 aufs 5er.

                            =/

                            Kommentar

                            Lädt...
                            X