PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] while ergebnis in variable?



Blakkeight
08.09.2006, 14:46
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

mitaki
08.09.2006, 15:14
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).

Manni
08.09.2006, 17:27
Versuchs mal damit oder etwas ähnlichem:

while($file = readdir($dh)) $files[] = $file;

Mog
08.09.2006, 18:27
Versuchs mal damit oder etwas ähnlichem:

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.

Rolus
08.09.2006, 19:08
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

Dingsi
08.09.2006, 19:59
Versuchs mal damit oder etwas ähnlichem:

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.

Blakkeight
08.09.2006, 23:36
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.

Rolus
09.09.2006, 08:56
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:

foreach($files as $file)
echo $file."<br />\n";

freundliche Grüße, Rolus

Blakkeight
09.09.2006, 09:10
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

Dingsi
09.09.2006, 09:48
Dann lies das ganze nicht in ein Array, sondern in einen String:
$files = "";
while($file = readdir($dh)) $files .= $file;oder alternativ doch in ein Array, welches du anschließend implodieren* lässt
$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.

Blakkeight
09.09.2006, 10:30
Ja genau so habe ich mir das vorgestellt und es Funzt wunderbar.


$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

Mog
09.09.2006, 15:35
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. ^^

Rolus
09.09.2006, 16:13
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 (http://de.php.net/manual/de/language.expressions.php)). 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

fanrpg
13.09.2006, 17:21
Mal eine kleine Frage:confused:

Warum lässt du das:

$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:

$files = '';
while($file = readdir($dh)) $files .= $file;

btw. vielleicht wäre auch eine eigene function auch nicht schlecht..

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 :)

Blakkeight
13.09.2006, 17:42
Mal eine kleine Frage:confused:
Warum lässt du das:

$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:

$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. =)