Ankündigung

Einklappen
Keine Ankündigung bisher.

while schleife in einer funktion return?

Einklappen

Neue Werbung 2019

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

  • while schleife in einer funktion return?

    Hallo ich habe folgende funktion, ich habe probleme die while schleife in das return zu legen.

    PHP-Code:
    function directory_tree($address,$comparedate){

     @
    $dir opendir($address);

      if(!
    $dir){ return 0; }
      
              
            while(
    $entry readdir($dir)){
                    if(
    is_dir("$address/$entry") && ($entry != ".." && $entry != ".")){                             
                            
    directory_tree("$address/$entry",$comparedate);
                    }
                     else   {

                      if(
    $entry != ".." && $entry != ".") {
                     
                        
    $fulldir=$address.'/'.$entry;
                        
    $last_modified filemtime($fulldir);
                        
    $last_modified_strdate("Y-m-d H:i:s"$last_modified);

                           if(
    $comparedate $last_modified)  {
                             
    $messages .= $fulldir.'=>'.$last_modified_str."<BR>";
                              
                              
                           }

                     }

                }
    //while

          
    }
    return 
    $messages;

    das ergebniss ist immer nur ein eintrag.

    wenn ichg diese zeile

    PHP-Code:
    $messages .= $fulldir.'=>'.$last_modified_str."<BR>"
    so ändere und das return weglasse habe ich ein grösseres ergebnis

    PHP-Code:
    echo $fulldir.'=>'.$last_modified_str."<BR>"


  • #2
    Du solltest $messages mit einem Startwert belegen wenn du den .= Operator darauf anwendest:
    PHP-Code:
    $messages '';
    $messages .= 'Hello World!'
    Bist du dir desweiteren sicher, dass du die Ergebnisse als String und nicht als Array zurückgebeben möchtest? Letzteres könnte möglicherweise sinnvoller sein (hängt davon ab wie/wofür du die Funktion anwendest).

    Kommentar


    • #3
      so ändere und das return weglasse habe ich ein grösseres ergebnis
      Das bezweifle ich.

      Du musst $messages mit einem Startwert belegen damit du den .= Operator darauf anwenden kannst:
      Ich glaub das erzeugt nur ne Notice oder?
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        wenn ich die funktion auf echo ändere ist das ergebniss

        PHP-Code:
        echo $fulldir.'=>'.$last_modified_str."<BR>";


        uploads//user/index.html=>2014-10-18 15:48:08
        uploads//admin/geiles-smillybig2.png=>2014-10-18 13:27:48
        uploads//admin/geiles-smilly1.png=>2014-10-18 13:28:38
        uploads//admin/Koala.jpg=>2014-10-18 13:26:57
        uploads//admin/.htaccess=>2014-10-18 15:48:08
        uploads//admin/Jellyfish.jpg=>2014-10-18 13:25:54
        uploads//admin/Tulips.jpg=>2014-10-18 13:23:33
        uploads//admin/Rock City.jpg=>2014-10-18 16:05:06
        uploads//admin/Desert.jpg=>2014-10-18 13:16:14
        uploads//admin/index.html=>2014-10-18 15:48:08
        uploads//index.php=>2014-10-18 15:48:08
        uploads//user/.htaccess=>2014-10-18 15:48:08
        uploads//user/index.html=>2014-10-18 15:48:08
        uploads//admin/geiles-smillybig2.png=>2014-10-18 13:27:48
        uploads//admin/geiles-smilly1.png=>2014-10-18 13:28:38
        uploads//admin/Koala.jpg=>2014-10-18 13:26:57
        uploads//admin/.htaccess=>2014-10-18 15:48:08
        uploads//admin/Jellyfish.jpg=>2014-10-18 13:25:54
        uploads//admin/Tulips.jpg=>2014-10-18 13:23:33
        uploads//admin/Rock City.jpg=>2014-10-18 16:05:06
        uploads//admin/Desert.jpg=>2014-10-18 13:16:14
        uploads//admin/index.html=>2014-10-18 15:48:08
        uploads//index.php=>2014-10-18 15:48:08 
        und so

        PHP-Code:
        $messages .= $fulldir.'=>'.$last_modified_str."<BR>";


        uploads//index.php=>2014-10-18 15:48:08 
        er zeigt nur den letzten eintrag

        Kommentar


        • #5
          Zitat von nikosch Beitrag anzeigen
          Ich glaub das erzeugt nur ne Notice oder?
          Korrekt. Hab' meinen Post editiert.

          @hups: Bei mir funktioniert es mit .=

          Kommentar


          • #6
            hab ich doch
            PHP-Code:
            $messages .= $fulldir.'=>'.$last_modified_str."<BR>"
            zeigt aber nur 1 zeile an

            ja ich wollte es als string

            Kommentar


            • #7
              wenn ich am ende der while schleife
              PHP-Code:
              GLOBAL $messages
              eingebe funzt es

              Kommentar


              • #8
                Du scheinst da ziemlich planlos an deinem Code herumzudoktern. Die Verwendung einer globalen Variable ist keine adäquate Lösung.
                Ist dir bewusst, dass Variablen zu initialisieren sind, bevor man sie verwendet?

                Kommentar


                • #9
                  wenn du so nett bist mir sagst wie ich das mache weiss ich in zukunft bescheid

                  Kommentar


                  • #10
                    Hast du eine Warnung bezüglich undefinierten Variable ("Notice: Undefined variable: ") erhalten? Falls nein, aktiviere die Anzeige solcher Warnungen.

                    PHP-Code:
                    error_reporting(E_ALL); 

                    Kommentar


                    • #11
                      error reporting habe ich.

                      habe versucht die variablen zu initialisieren

                      PHP-Code:
                      function directory_tree($address,$comparedate){
                       
                       @
                      $dir opendir($address);

                        if(!
                      $dir){ return 0; }
                        
                              
                      $messages='';
                              
                      $counter 0;
                              while(
                      $entry readdir($dir)){
                                  
                                      if(
                      is_dir("$address/$entry") && ($entry != ".." && $entry != ".")){                             
                                              
                      directory_tree("$address/$entry",$comparedate);
                                      }
                                       else   {

                                        if(
                      $entry != ".." && $entry != ".") {
                                       
                                          
                      $fulldir=$address.'/'.$entry;
                                          
                      $last_modified filemtime($fulldir);
                                          
                      $last_modified_strdate("Y-m-d H:i:s"$last_modified);

                                             if(
                      $comparedate $last_modified)  {
                                               
                      $messages .= $fulldir.'=>'.$last_modified_str."<BR>";
                                                
                                              
                      $counter++;  
                                             }

                                       }
                      //GLOBAL $messages;
                      //GLOBAL $counter;
                                  
                      }//while

                            
                      }
                      // print_r($messages);      

                      return $messages.$counter;

                      keine fehlermeldung und es wird nur eine zeile wie bereits erwähnt angezeigt

                      Kommentar


                      • #12
                        das problem ist, dass du die funktion rekursiv aufrufs aber nicht den rückgabewert der funktion in der funktion auffängst.


                        PHP-Code:
                        function directory_tree($address,$comparedate){
                         
                         @
                        $dir opendir($address);

                          if(!
                        $dir){ return 0; }
                          
                                
                        $messages='';
                                
                        $counter 0;
                                while(
                        $entry readdir($dir)){
                                    
                                        if(
                        is_dir("$address/$entry") && ($entry != ".." && $entry != ".")){                             
                                               
                        $messages .= directory_tree("$address/$entry",$comparedate);
                                        }
                                         else   {

                                          if(
                        $entry != ".." && $entry != ".") {
                                         
                                            
                        $fulldir=$address.'/'.$entry;
                                            
                        $last_modified filemtime($fulldir);
                                            
                        $last_modified_strdate("Y-m-d H:i:s"$last_modified);

                                               if(
                        $comparedate $last_modified)  {
                                                 
                        $messages .= $fulldir.'=>'.$last_modified_str."<BR>";
                                                  
                                                
                        $counter++;  
                                               }

                                         }
                        //GLOBAL $messages;
                        //GLOBAL $counter;
                                    
                        }//while

                              
                        }
                        // print_r($messages);      

                        return $messages.$counter;

                        so sollte dein code funktionieren
                        liebe Grüße
                        Fräulein Dingsda

                        Kommentar


                        • #13
                          oh man da währe ich nie draufgekommen vielen dank dafür

                          Kommentar


                          • #14
                            Ach, tatsächlich. Hatte ich auch nicht gesehen.

                            So einen wahnsinnigen Mehrwert hat die Funktion aber irgendwie auch nicht. Viel zu spezifisch mit den BRs usw.
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar

                            Lädt...
                            X