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?
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      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.
                            [COLOR="#F5F5FF"]--[/COLOR]
                            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                            [COLOR="#F5F5FF"]
                            --[/COLOR]

                            Kommentar

                            Lädt...
                            X