Ausgabe sortieren..
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzeigen
array
ausblenden
ausgabe
code
dank
datei
eintrag
file
funktion
inhalt
packen
schleife
spezieller dateien
test
testen
umsetzen
url
verzeichnis
zahl
-
Hallo.. ich habe ein script, welches alle .txt dateien eines Ordners ausgibt, und jeweils den Inhalt angibt..
in etwa so:
dateiname1 - inhalt
dateiname2 - inhalt
usw..
Der Inhalt besteht immer nur aus einer Zahl..
Jetzt möchte ich aber, dass die Ausgabe sortiert wird.
Aalso, dass die datei mit der grössten Zahl oben steht, und die nidrigste unten..
Wie google mir bereits sagte muss ich das mit einem array lösen, jedoch habe ich es bis jetzt nicht geschafft es so umzusetzen.. könnt ihr mir villeicht nochmal helfen?
hier das Script:
//Top10 Usgeben---------------------------------- echo "<div id=\"top10\"><h2>Top 10</h2>"; $verzeichnisname = "usr"; $verzeichnis = opendir($verzeichnisname); while($eintrag = readdir ($verzeichnis)) { $test = $verzeichnisname . "/" . $eintrag; if(is_dir($test) or (($eintrag==".htaccess") or ($eintrag=="hitcounter.txt"))) { /* echo "<!-- $eintrag -->\n"; */ } else{ $filename = "usr/$eintrag"; $handle = fopen ($filename, "r"); $contents = fread ($handle, filesize ($filename)); fclose ($handle); $kurzer_name = substr("$eintrag", 0, -4); //hier wird das .txt am ende der datei entfernt echo "$kurzer_name -- $contents<br>"; //das ist die eigentliche ausgabe } } echo "</div>"; //Top10 Usgeben----------------------------------
Habt ihr eine lösung? (sry das ich einen neuen Thread eröffne, Aber ich kann leider nicht im letzen Posten (doppelpost))
MFG PAddy -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
$sortiert = array($contents); sort($sortiert [int $sort_flags = SORT_NUMERIC ] ); foreach ($sortiert as $key => $val) { echo "TopTen[" . $key . "] = " . $val . "\n"; }
So zum Beispiel -
Da musste ich jetzt aber tief für in die Trickkiste greifen :p
<?php $files = glob('VERZEICHNISNAME/*.txt', GLOB_NOSORT); usort($files, create_function('$a, $b', 'return file_get_contents($b) - file_get_contents($a);')); //Top10 Usgeben---------------------------------- echo "<div id=\"top10\"><h2>Top 10</h2>"; foreach ($files as $file) { echo basename($file, '.txt').' - '.file_get_contents($file).'<br />'; } echo "</div>"; //Top10 Usgeben---------------------------------- ?>
Wie du es am Ende machst, ist aber eigentlich dir überlassen. Fakt ist, dass du erst einmal alle Dateien in ein Array packen musst und dieses Array dann mit Hilfe einer eigenen Funktion in Kombination mit usort so sortierst, wie du möchtest.
Danach erzeugst du dann einfach deine Ausgabe, wie auch sonst.
Beitrag zuletzt geändert: 25.1.2012 15:07:00 von fabo -
Ja, laut w3schools ist es ein array, was ja sogar logisch ist.
-
hmm.. ja gut..
aber wenn ich jetzt eine datei ausschliessen will?
also wenn der ordner 20 verschiedene .txt dateien enthält ich aber eine davon nicht anzeign lassen will, (z.B. nichtzeigen.txt)
wie schliesse ich diesse aus dem array aus?
und noch etwas wichtiges^^:
geht es auch, dass nur die 10 Grössten Dateien angezeigt werden?
Danke für eure Hilfe -
Datei nicht anzeigen lassen kann man mit fabo's Code so umsetzen:
Danke
Mit den 10 größten Dateien meinst du die Zahlen die jeweils in den Dateien sind?
ja genau.. also die 10 dateinen mit den grössten zahlen.. den rest ausblenden.. -
Genau Umsetzung kann ich dir zz nicht sagen, allerdings als Denkanstoß:
Du müsstest im Array nach den größten values (die Zahlen) absteigend sortieren und eben danach nur die 10 oberen davon anzeigen lassen. Hab dazu die Funktion natsort gefunden, am Besten probierst du das mal aus, grad leider selber keine Zeit zu testen.
Allerdings kannst du dann mit "nichtanzeigen" ein Problem bekommen, denn wenn es unter den ersten 10 ist und du es ausblenden lässt wie ich geschrieben hatte werden dann nurnoch die 9 anderen angezeigt, da bräuchtest du ne andere Lösung. Vielleicht kann man bestimmte Einträge aus Arrays löschen? (Weiß ich nicht, aber wenn kann man ja wenn $file == nichtanzeigen $file['nichtanzeigen'] löschen) -
Ja, das werde ich mal testen...
Das mit dem nichtanzeigen hat sich jetzt auch erledigt.. (ich hab die auszublendende datei einfach in.dat umgenannt) das geht so auch... (die hat nur die Funktion, später kopiert und eingefügt zu werden...) und bei idessem vorgang kann ich sie ja einfach umbenennen in .txt.
Und da ja nur .txt dateien angezeigt werden, wird die .dat ja automatisch nicht angezeigt^^
Ich hoffe, das ich das jetzt einigermasen verständlich formuliert habe...xD
*mit dem handy geschrieben -
Du kannst für Glob auch Regexpressions zum Ausschließen spezieller Dateien verwenden. Wie dem auch sei.... Um nur die höchsten 10 anzuzeigen musst du nur die Schleife leicht abändern:
<?php $files = glob('VERZEICHNISNAME/*.txt', GLOB_NOSORT); usort($files, create_function('$a, $b', 'return file_get_contents($b) - file_get_contents($a);')); //Top10 Usgeben---------------------------------- echo "<div id=\"top10\"><h2>Top 10</h2>"; foreach (array_slice($files, 0, 10) as $file) { echo basename($file, '.txt').' - '.file_get_contents($file).'<br />'; } echo "</div>"; //Top10 Usgeben---------------------------------- ?>
-
fabo schrieb:
Du kannst für Glob auch Regexpressions zum Ausschließen spezieller Dateien verwenden. Wie dem auch sei.... Um nur die höchsten 10 anzuzeigen musst du nur die Schleife leicht abändern:
Ja Supi.. funktioniert einwandfrei^^
Du bist jetzt mein PHP-Gott
Danke^^ -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage