Ergebnis 1 bis 15 von 15

Thema: [PHP] while ergebnis in variable?

  1. #1

    [PHP] while ergebnis in variable?

    Tach,

    ich habe folgendes Problem, ich will das Ergebnis einer while schleife in eine Variable stecken weiß aber nicht wie. Ich weiß das es mit einem Array geht aber denn kann cih nicht so wieter verwenden wie ich das brauche.
    Koennt ihr mir da ein paar tipps geben?

    Was dabei rauskommen soll: Ich will einen Ordner auslesen und die datein auflisten aber um es richtig darstellen zu koennen (Templatesystem) muss ich das alles in einer Variable speichern. Ich hoffe das reicht als erklaerung. =)


    gruss jay

  2. #2
    Kannst du das jeweilige Template nicht direkt in der Schleife verarbeiten lassen? Oder nach der Schleife mit Array in einer foreach Schleife das Template ausgeben?

    Andernfalls müsstest du eventuell das Template entsprechend anpassen, so dass es alle Elemente eines Arrays ausgibt (sprich: per Hand).

  3. #3
    Versuchs mal damit oder etwas ähnlichem:
    PHP-Code:
    while($file readdir($dh)) $files[] = $file

  4. #4
    Zitat Zitat von Manni
    Versuchs mal damit oder etwas ähnlichem:
    PHP-Code:
    while($file readdir($dh)) $files[] = $file

    Das ist aber unsauber. PHP _darf_ laut Sprachdeffinition bei $tmp=( $fu=$bar() ) immer true annehmen. Der obere Ausdruck duerfte also durchaus true sein. Ganz egal was die Funktion $bar nun zurueckgibt.

  5. #5
    Zitat Zitat von Mog
    Der obere Ausdruck duerfte also durchaus true sein. Ganz egal was die Funktion $bar nun zurueckgibt.
    Was heißt dürfte? Wenn bar() false zurückgibt, ist - meines Wissens nach - auch ($foo = bar()) false. Manchmal muss man eine Sprache auch zu ihrem Glück zwingen.

    freundliche Grüße, Rolus

  6. #6
    Zitat Zitat von Manni
    Versuchs mal damit oder etwas ähnlichem:
    PHP-Code:
    while($file readdir($dh)) $files[] = $file
    $files würde ich vielleicht noch initialisieren, also einfach ein $files = array(); vor die Schleife setzen. Eigentlich sollte register_globals langsam überall aus sein, aber sicher ist sicher. Mit aktivierten register_globals und nicht gesetztem $files könnte man nämlich per Parameter an das Skript der Liste beliebige Dateien hinzufügen, was unter Umständen zu Sicherheitslecks führen könnte. Vielleicht in dem speziellen Fall nicht, aber es ist im Allgemeinen einfach besserer Stil, Variablen zu initialisieren.

  7. #7
    Danke, werds mal ausprobieren.

    So habs mal probiert und mir ist aufgefallen wenn ichs somache wie oben habe ich es ja immo noch nicht in einer Variable.

    Geändert von Blakkeight (09.09.2006 um 08:44 Uhr)

  8. #8
    Zitat Zitat von Jay
    So habs mal probiert und mir ist aufgefallen wenn ichs somache wie oben habe ich es ja immo noch nicht in einer Variable.
    Wie meinst du das? Du hast die Dateinamen dann im Array $files. Das kannst du dann ausgeben. Zum Beispiel in einer Foreach-Schleife:
    Code:
    foreach($files as $file)
      echo $file."<br />\n";
    freundliche Grüße, Rolus

  9. #9
    Aeh das ist ja das was ich nciht machen kann/will wegen dem Templatesystem.

    Die Foreach schleife an sich ist ja ganz cool und klappt auch wunderbar nur will ich das was die schleife ausgibt nicht nach und nach unternander schreibt sondern nach und nach in einer Variable schreibt.

    Ich hatte mal vor ein paar jahren gelsen das man Vraiblen auch erweitern kann mit einem Punkt, weiß aber nicht mehr wie das geht und wo das steht, weiß da jemand vlt was drueber?


    gruss jay

  10. #10
    Dann lies das ganze nicht in ein Array, sondern in einen String:
    PHP-Code:
    $files "";
    while(
    $file readdir($dh)) $files .= $file
    oder alternativ doch in ein Array, welches du anschließend implodieren* lässt
    PHP-Code:
    $files = array();
    while(
    $file readdir($dh)) $files[] = $file;
    $yourfiles implode(""$files); 
    Wobei das "" in implode() durch z.b. ", " austauschbar ist.

    * Irgendwie ist das ein verdammt cooler Funktionsname.

  11. #11
    Ja genau so habe ich mir das vorgestellt und es Funzt wunderbar.

    PHP-Code:
    $files = array();
    while(
    $file readdir($dh)) $files[] = $file;
    $yourfiles implode(""$files); 
    Ich habe die Variante genommen, fantastisch das bringt mir einen grossen schritt weiter. Danke!


    gruss jay

  12. #12
    Zitat Zitat von Rolus
    Was heißt dürfte? Wenn bar() false zurückgibt, ist - meines Wissens nach - auch ($foo = bar()) false. Manchmal muss man eine Sprache auch zu ihrem Glück zwingen.

    freundliche Grüße, Rolus

    Es gibt sachen die man nicht macht. Wenn du dir die Doku durchblaetterst wirst du bei den neueren Eintraegen auch hin und wieder den Vermerk finden, dass man das so nicht macht. ^^

  13. #13
    Zitat Zitat von Mog
    Es gibt sachen die man nicht macht. Wenn du dir die Doku durchblaetterst wirst du bei den neueren Eintraegen auch hin und wieder den Vermerk finden, dass man das so nicht macht. ^^
    Hm, das habe ich noch nicht gelesen. Hast du vielleicht noch einen Link? Soweit ich weiß entspricht der Ausdrucks-Wert einer Funktion dem Rückgabewert (steht zumindest hier). Das heißt ($foo = bar()) entspricht ($foo = true), wenn bar() true zurückgibt. Im Manual wird zwar erklärt, dass while ($file = readdir($handle)) eigentlich while (false !== ($file = readdir($handle))) heißen sollte, aber das hat ja andere Gründe. Und der zweite Weg ist dann wohl auch falsch, wenn ($file = readdir($handle)) eh nicht false annimmt?

    freundliche Grüße, Rolus

  14. #14
    Mal eine kleine Frage

    Warum lässt du das:
    PHP-Code:
    $files = array();
    while(
    $file readdir($dh)) $files[] = $file;
    $yourfiles implode(""$files); 
    Durch implode() laufen? Kostet nur mehr Speed und vor allem Grösse in einer Datei..
    dabei würde es das auch tun:
    PHP-Code:
    $files '';
    while(
    $file readdir($dh)) $files .= $file
    btw. vielleicht wäre auch eine eigene function auch nicht schlecht..
    PHP-Code:
    function readdir_string($handle)
    {
        if( 
    $handle opendir($handle) )
        {
            
    $file '';
            while( ( 
    $files readdir($handle) ) !== false )
            {
                if( 
    $files != '.' && $files != '..' )
                {
                    
    $file .= $files;
                }
            }
            if( !empty(
    $file) )
            {
                return 
    $file;
            }
            else
            {
                return 
    false;
            }
        }
        else
        {
            return 
    false;
        }

    Die wäre dann zwar etwas mehr Code als obiges Beispiel, aber man weiss auf jedenfall wo man dran ist

  15. #15
    Zitat Zitat von fanrpg
    Mal eine kleine Frage
    Warum lässt du das:
    PHP-Code:
    $files = array();
    while(
    $file readdir($dh)) $files[] = $file;
    $yourfiles implode(""$files); 
    Durch implode() laufen? Kostet nur mehr Speed und vor allem Grösse in einer Datei..
    dabei würde es das auch tun:
    PHP-Code:
    $files '';
    while(
    $file readdir($dh)) $files .= $file
    Das koennte ich auch machen, werds warscheinlich auch tun. =)
    Danke fuern den Hinweiß habe garnet mehr dran gedacht.

    >> Habe grade festgestellt das Die Zweite Loesung doch nicht so gut ist wie fuer das was was ich vorhabe. D.h. ich bleib bei Implode. =)

    Geändert von Blakkeight (14.09.2006 um 09:31 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •