Rekursion mit Array

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

  • Rekursion mit Array

    das was ich habe ist im prinzip :

    PHP-Code:
    $Parentgroup = array();
    $ParentGroup[]=2;
      foreach (
    $ParentGroup as $key){
      echo 
    $i;
      
    print_r($ParentGroup);
      
    $sql="SELECT * FROM filegroupgroupcombine WHERE 
    `ParentGroup` =
    $key AND durchsucht !=1";
      
    $res=send_sql($db,$sql);

        WHILE (
    $result=mysql_fetch_array($res,MYSQL_ASSOC)){
        
          
    $ParentGroup[]=$result['Group'];
          
    $sql2="UPDATE `filegroupgroupcombine` SET `durchsucht` = '1'
     WHERE `filegroupgroupcombine`.`id` =
    $result[id]";
          
    $res2=send_sql2($db,$sql2);
          
    $i++;  
        }
      } 
    Das was ich möchte das er die Foreach schleife mit den neuen Werten füttert was ich jetzt habe ist das er nur einmal durchgeht.
    sagen wir Er geht mit 2 in die schleife und kriegt die werte 3 und 4 und dann soll er das ganze wieder durchlaufen mit den werten 2 3 und 4
    aber soweit kommt er anscheinend nicht.


    fällt irgendeinem ein Fehler auf ?
    Zuletzt geändert von Postaria; 19.12.2007, 17:20.

  • #2
    Imho beachtet das foreach dein Array nur beim Eintritt in die Schleife und beachtet keine Änderungen am Array. Vielleicht kannst du es einmal mit einem ArrayObject versuchen, kann sein, dass PHP damit anders umgeht. Ansonsten musst du deine Schleife einfach etwas umbauen, so dass du einen Stack verwendest.


    Btw: Bist du dir sicher, dass deine vielen Queries nötig sind?

    Kommentar


    • #3
      ney sind nicht nötig werden auch noch gefixt jedoch nach einer Lauffähigen Version. Dient zur Zeit nur der Übersicht.

      im Prinzip ist ja mein $ParentGroup eine Art von Stack
      aber ich kriege die rekurision mit den neuen werten nicht hin ....

      Kommentar


      • #4
        Du behandelst es aber wie ein Array! Hat das ArrayObject was gebracht? sonst versuch mal folgendes:
        PHP-Code:
        $ParentGroup[]=2;
        while( 
        count$ParentGroup )>) {
           
        $key array_shift$ParentGroup );
           
        // ...

        Kommentar


        • #5
          Erstmal danke an dich PHP-Desaster
          habe es mit deinem Gedankenspring gelöst gekriegt

          das script sieht nun folgendermaßen aus falls einer Interresse hat

          PHP-Code:

          $Parentgroup 
          = array();
          $ParentGroup[]=2;
          $i 1;
          foreach (
          $ParentGroup as $key){
            while( 
          count$ParentGroup )>) {
              
          $sql="SELECT * FROM filegroupgroupcombine WHERE `ParentGroup` =$key AND durchsucht !=1";
              
          $res=send_sql($db,$sql);
              
          $durch mysql_num_rows($res);
              if (
          $durch == 0){
                break;
              }
              WHILE (
          $result=mysql_fetch_array($res,MYSQL_ASSOC)){
                
          $newgroup[] =$result['Group'];
                
          $ParentGroup[]=$result['Group'];
                
          $sql2="UPDATE `filegroupgroupcombine` SET `durchsucht` = '1'
           WHERE `filegroupgroupcombine`.`id` =
          $result[id]";
                
          $res2=send_sql2($db,$sql2);
                
          $i++;  
                 
          $key array_shift$ParentGroup );
                }
              }
            }
          $sql "UPDATE `filegroupgroupcombine` SET `durchsucht` = '0'";
          $res=send_sql($db,$sql);
          $newgroupDoppelteWerteEntfernen($newgroup);
          print_r($newgroup);
          echo 
          "<br>";
          function 
          DoppelteWerteEntfernen($newgroup)
          {
              
          $newgroup array_unique($newgroup);
              
          $i 0;
              foreach(
          $newgroup as $Wert)
              {
                  
          $ParentGroup1[$i] = $Wert;
                  
          $i++;
              }
              return 
          $newgroup;

          Zuletzt geändert von Postaria; 19.12.2007, 17:22.

          Kommentar


          • #6
            PHP-Code:
            foreach ($ParentGroup as $key){
              while( 
            count$ParentGroup )>) { 
            Das foreach ist überflüssig. Den restlichen Code schau ich mir jetzt nicht an, der ist doch echt zu krass...

            Kommentar


            • #7
              wieso krass ?

              Kommentar


              • #8
                wieso krass ?
                Weil da soviel Käse drin ist!
                - Select *
                - Stringverkettung
                - $Parentgroup vs. $ParentGroup
                - DoppelteWerteEntfernen() und $ParentGroup1
                - inkonsistente Schreibweise (while oder WHILE)
                - mysql_fetch_array($res,MYSQL_ASSOC)
                - $key = array_shift( $ParentGroup ); an der falschen Position
                - ...

                Einzeln sind es nur Kleinigkeiten, aber auch Kleinvieh macht Mist und viel Kleinvieh macht viel Mist

                Kommentar

                Lädt...
                X