Ankündigung

Einklappen
Keine Ankündigung bisher.

Recursive depency

Einklappen

Neue Werbung 2019

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

  • Recursive depency

    Hallo liebe Gemeinde, ich habe ein Problem.

    Habe mich an ein script versucht was Sport-Turniere organisieren kann. Leider hängt es bei mir schon ziemlich früh, nälich an der anzeige der generierten Spieltage. Da bekomme ich folgenden Fehler:

    Fatal error: Nesting level too deep - recursive dependency? in /usr/export/www/vhosts/funnetwork/hosting/dfbligamanager/teamclass.php on line 35

    PHP-Code:
    <?php
    class Team
    {
    var
      
    $name;
    var  
      
    $played false;
    var  
      
    $gegner = array();
      
    }
    $anzteams=0;
    $teams = array();
    foreach( 
    $_POST["teams"] as $team)
    {
        
    $newteam = new Team();
        
    $newteam->name $team;
        
    $teams[] = $newteam;
        
    }
    $anzteams count($teams);


    shuffle  ($teams);

    for (
    $tag $tag $anzteams$tag++){
      
       echo
    'Datum: <input type="text" name="datum$tag"><br>';
       echo 
    "<u>Spieltag $tag</u>";
        echo 
    "<br><br>";
        for (
    $t1 $t1 $anzteams$t1++){
        if(!
    $teams[$t1]->played){
            
    $team1 $teams[$t1];
            for (
    $t2 $t1+$t2 $anzteams $t2++){
            if (!
    $teams[$t2]->played && !in_array ($team1,$teams[$t2]->gegner)){
            
    $team2 $teams[$t2];
            
    $teams[$t2]->played true;
            
    $teams[$t2]->gegner[] = $teams[$t1];
            
    $teams[$t1]->played true;
            
    $teams[$t1]->gegner[] = $teams[$t2];
            
            echo 
    "$team1->name - $team2->name";
            echo
    "<br>";
            
    $t2=$anzteams;
            echo
    "<br>";
            };
            
            };
         
        };
            
        };


        for (
    $z $z $anzteams$z++){
        
    $teams[$z]->played false;

        }
    };
    ?>

    Leider weiß ich nicht wieso der Fehler auftritt und was der besagt, und kann ihn somit auch nicht beheben!

    Vielleicht könnt ihr mir ja helfen!

  • #2
    Laut Handbuch ist der erste Parameter von in_array() entweder ein String oder ein Array: PHP: in_array - Manual

    Dementsprechend wird er folgende Zeile (die im Übrigen Zeile 35 ist) nicht ausführen können:

    PHP-Code:
    if (!$teams[$t2]->played && !in_array ($team1,$teams[$t2]->gegner)){ 
    </SPAN>

    Ich würde daher den folgenden Code eher verwenden:

    PHP-Code:
            if (!$teams[$t2]->played && !array_key_exists ($team1->name,$teams[$t2]->gegner)){
            
    $team2 $teams[$t2];
            
    $teams[$t2]->played true;
            
    $teams[$t2]->gegner[] = $teams[$t1]->name;
            
    $teams[$t1]->played true;
            
    $teams[$t1]->gegner[] = $teams[$t2]->name;
            
            echo 
    "$team1->name - $team2->name";
            echo
    "<br>";
            
    $t2=$anzteams;
            echo
    "<br>";
            }; 


    Dann sollte es funktionieren.

    Kommentar


    • #3
      ja wunderbar nun funktioniert es. vielen dank! habe das im manual wohl überlesen.

      P.s. wieder was dazu gelernt

      Kommentar


      • #4
        Problem doch nicht gelöst....
        folgenden Fehler gibt es nun

        Warning: array_key_exists() [function.array-key-exists]: The first argument should be either a string or an integer in C:\xampp\htdocs\dfb\teamclass.php on line 35

        Mein erstes argument ist aber kein string oder int. aber in der php manual steht auch das das erste argument ein mixed ist. das heißt doch auch das es ein array nimmt oder nicht?

        Kommentar


        • #5
          nein. mixed heißt nur, dass der Parameter verschiedene Typen annimmt. Nicht zwingend aber alle. DU kannst array_diff benutzen.

          Kommentar


          • #6
            okay array_diff klingt im manual schon ma gut^^

            aber wie komm eich denn jetzt auf mein heimteam ($team1) wenn beide argumente ein array sein sollen?

            Kommentar


            • #7
              Warum habe ich das wohl gerade geschrieben?

              Kommentar


              • #8
                ich glaube wir reden an einander vorbei.

                mein heimteam muss sozusagen festgelegt mit dem schleifensurchlauf werden und das gegnerteam muss aus einem array gesucht werden!

                Kommentar


                • #9
                  Wenn du nur den Namen nutzt, wie ich es in meinem Beispiel geschrieben habe, dann dürfte es nicht zu diesem Fehler kommen, den du da beschrieben hast!?

                  Kommentar


                  • #10
                    Okay sry hab was übersehn bei deinem bsp.

                    es funktioniert aber noch nicht richtig. bei 6 teams macht er es bis zum 4. spieltag richtig und am 5. und 6. spieltag gibt es nur noch 2 begegnungen pro spieltag obwohl es 3 sein müssten!!!

                    Kommentar


                    • #11
                      okay sry hatte was übersehen indeinem bsp.
                      Leider funktioniert es immernoch nicht. Bis zum 4. Spieltag macht er alles richtig. Am 5. und 6. Spieltag jedoch gibt es nur 2 paarungen pro spieltag obwohl es 3 geben müsste.

                      Habe ich einen Denkfehler in der Logik?

                      Kommentar


                      • #12
                        weiß es keiner genau oder ist dieses programm als außenstehnder vll. zu schwer zu verstehen. Ich krieg es leider nicht hin, das ganze objektiv zu betrachten und somit denke ich eigentlich das es richtig ist!

                        Kommentar


                        • #13
                          Ich finde das Programm unübersichtlich (z.B. wozu Du überhaupt Klassen benutzt) undmag mich da gerade gar nicht einlesen.

                          Kommentar


                          • #14
                            sollt ich das vielleicht kommentieren?

                            Oder wie kann ich es übersichtlich gestalten?

                            Kommentar

                            Lädt...
                            X