Autor |
Nachricht |
synni
Threadersteller
Dabei seit: 31.07.2003
Ort: koeln
Alter: 39
Geschlecht:
|
Verfasst Fr 29.06.2007 10:20
Titel [PHP] Verzechnis auslesen + alphabetisch sortieren |
 |
|
Moin zusammen,
ich habe ien script geschrieben, dass mir ein bestimmtes verzeichnis, in dem listen liegen ausliest, nach dem auslesen werden download-links erzeugt.
Code: |
<?php
$i=0;
$niederlassung = $_COOKIE["niederlassung"];
$pfad="data/sub/en/";
$verz=opendir ($pfad);
while ($file=readdir($verz))
{
if (filetype($pfad.$file)!="dir")
{
$i++;
$dateiname = explode(".",$file);
$dateinameteil = $dateiname[0];
echo '<a href="'.$pfad.$file.'" target="_blank">
<span class="pwd">'.$dateinameteil.'
</span></a><br>';
}
}
closedir($verz);
if ($i==0)
{
echo '
<span style="font-size:9px;font-style:italic">
Currently there are no special documents for your subsidiary available.
</span>';
}
?>
|
mit readdir() bekomme ich die einträge aber nicht von a-z sortiert sondern "zufällig" - hat jemand eine idee, wie ich die einträge am besten alphabetisch sortiert ausgeben kann?
greetings
|
|
|
|
 |
Pixelpole
Dabei seit: 25.10.2004
Ort: Trier
Alter: 38
Geschlecht:
|
Verfasst Fr 29.06.2007 10:23
Titel
|
 |
|
baller dir alles in ein array und jag sort() drüber
//PS: wenn du den dateinamen ohne erweiterung willst nutze die funktion basename
deine funktion fluppt nämlich nich mehr richtig wenn du nen zusätzlichen punkt im dateinamen hast
Zuletzt bearbeitet von Pixelpole am Fr 29.06.2007 10:26, insgesamt 1-mal bearbeitet
|
|
|
|
 |
Anzeige
|
|
 |
Kraat
Dabei seit: 05.10.2006
Ort: Köln
Alter: 43
Geschlecht:
|
|
|
|
 |
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 47
Geschlecht:
|
Verfasst Fr 29.06.2007 11:21
Titel
|
 |
|
Zitat: | dass mir ein bestimmtes verzeichnis [...] ausliest |
So viel Mühe hättest du dir allerdings nicht machen müssen.
Statt opendir()/readdir()/Schleife/closedir() hättest du auch glob() einsetzen können.
Zitat: | nach dem auslesen werden download-links erzeugt. |
Nein. Die Dateien werden verlinkt, aber es werden keine "Download-Links" erzeugt.
Das sind ganz normale Links - mit einem target="_blank".
Das mit dem neuen Fenster finde ich ganz schlimm, wenn es darum geht, Files runterzuladen.
Ziemlich nervige Sache.
Ich überlasse es normalerweise immer dem User, ob er ein Dokument im neuen Fenster, neuen Tab oder gleichem Fenster/Tab öffnen will.
Aber warum beim Download ein neues Fenster? Das führt doch immer zu einem leeren neuen Tab/Fenster...
Naja und wie gesagt: Es ist kein Download-Link. Die Datei wird nur dann zum Download geboten, wenn ein Browser nichts mit dem Content-Type der Datei anfangen kann.
Ich würde in so einem Fall mit header() arbeiten und echte Download-Links erstellen. (Wie du das genau machst, findest du in den Kommentaren zu der Funktion, wenn es nicht direkt in der Beschreibung steht.)
|
|
|
|
 |
synni
Threadersteller
Dabei seit: 31.07.2003
Ort: koeln
Alter: 39
Geschlecht:
|
Verfasst Fr 29.06.2007 11:25
Titel
|
 |
|
vielen dank schonmal für die schnelle hilfe!
das script sieht jetzt so aus:
Code: |
<?php
$i=0;
$niederlassung = $_COOKIE["niederlassung"];
$pfad="data/sub/en/";
$verz=opendir ($pfad);
while ($file=readdir($verz))
{
if (filetype($pfad.$file)!="dir")
{
$i++;
$dateiname = explode(".",$file);
$dateinameteil = $dateiname[0];
$array_liste[] = array('<a href="'.$pfad.$file.'" target="_blank">
<span class="pwd">'.$dateinameteil.'</span></a><br>
');
}
}
closedir($verz);
sort($array_liste);
print_r ($array_liste);
if ($i==0)
{
echo '<span style="font-size:9px;font-style:italic">
Currently there are no special documents for your subsidiary available.
</span>';
}
?>
|
die ausgabe sieht so aus:
Code: |
...
Array ( [0] => Array ( [0] => Automated Expense Claim Memo
) [1] => Array ( [0] => Company Car Policy
) [2] => Array ( [0] => Expense Guidelines
...
|
Die Verlinkung und Sortierung klappt perfekt. Wie kann ich die Ausgabe denn noch beeinflussen, sodass das "...Array (0.." wegfällt?
//edit @rob: danke für die ausführiche erklärung - ich denke das umständliche kommt zustande, weil ich noch nicht so weit mit php bin. ich werde deine variante auch mal probieren.
Zuletzt bearbeitet von synni am Fr 29.06.2007 11:33, insgesamt 1-mal bearbeitet
|
|
|
|
 |
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 47
Geschlecht:
|
Verfasst Sa 30.06.2007 20:14
Titel
|
 |
|
Zitat: | Wie kann ich die Ausgabe denn noch beeinflussen, sodass das "...Array (0.." wegfällt? |
Indem du den Aufruf von print_r() weg läßt.
Warum hast du das in dein Script eingebaut?
Und was soll folgende Zeile bewirken?
Code: | $niederlassung = $_COOKIE["niederlassung"]; |
Kommt im weiteren Script überhaupt nicht vor...
Zitat: | ich denke das umständliche kommt zustande, weil ich noch nicht so weit mit php bin. ich werde deine variante auch mal probieren. |
Ja, mit glob() wäre dein Code bei weitem kürzer.
Das Prinzip, wie es funktioniert:
Code: | <?php
foreach ( glob("*") as $filename ) {
echo "<a href=\"$filename\" target=\"_blank\">$filename</a><br>\n";
}
?> |
Und natürlich kannst du den Krams dann auch in einem Array speichern und dieses dann sortieren.
glob() selbst gibt dir die Daten bereits in einem Array zurück:
Code: | $array = glob("*"); |
Der Code ist kürzer, als deine Version, wie du siehst...
Kein opendir(), kein readdir(), keine Schleife. Du bekommst gleich dein Array.
Und eigentlich müßte glob() den Krams auch schon sortiert rausgeben...
Wenn man die Sortierung nicht will, muß man das explizit mit dem Parameter GLOB_NOSORT sagen.
Also: glob( "*", GLOB_NOSORT );
Dann bekommst du die Reihenfolge, wie die Files im Directory liegen.
Und wenn du nur bestimmte Files haben willst, dann teilst du das glob() halt über den ersten Parameter mit.
Ich habe dort jetzt einen Stern rein gesetzt, damit alle Files ausgegeben werden.
Wenn du z.B. nur Textfiles haben willst, dann schreibst du:
glob( "*.txt" );
|
|
|
|
 |
bugzz
Dabei seit: 08.08.2009
Ort: -
Alter: 39
Geschlecht:
|
Verfasst Sa 08.08.2009 17:57
Titel
|
 |
|
Hallo!
Ich habe eine frage. Wie weit ich weiss funktionen sort() und asort() können ein Array ganz gut alphabetisch sortieren.
Aber eins versteh ich nicht.
es gibt eine funktion - get_loaded_extensions(), die lein array mit allen PHP-Erweiterungen liefert, aber unsortiert. Ich natürlich, versuch die o.g. funktionen anzuwenden war aber nix da =(
Bei :
Code: | $ext = get_loaded_extensions();
echo "<pre>";
print_r($ext);
echo "</pre>"; |
bekomme ich folgendes:
Code: | Array
(
[0] => zip
[1] => xmlwriter
[2] => libxml
[3] => xml
[4] => wddx
[5] => tokenizer
[6] => sysvshm
[7] => sysvsem
[8] => sysvmsg
[9] => session
[10] => SimpleXML
[..] = > ...
[49] => xmlrpc
[50] => xsl
) |
und nach dem ich asort($ext) oder sort($ext) verwendet habe
Code: | $new = asort($ext);
// oder
// $new = sort($ext);
echo "<pre>";
print_r ($new);
echo "</pre>"; |
bekomme ich nur das in Browser :
Jap, richtig - EINE EINS.
Kann mir bitte jemand erklären warum das so ist und was mache ich falsch ?
|
|
|
|
 |
m
Moderator
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst Sa 08.08.2009 18:55
Titel
|
 |
|
Zitat: | Jap, richtig - EINE EINS |
Was völlig korrekt ist.
http://php.net/sort
Einfach mal die Doku lesen …
Zuletzt bearbeitet von m am Sa 08.08.2009 18:55, insgesamt 1-mal bearbeitet
|
|
|
|
 |
|
|
 |
Ähnliche Themen |
PHP: Textdatei auslesen und sortieren, wie?
[PHP] alphabetisch ordnen
Alphabetisch geordnete Liste - wie?
Links in Dreamweaver alphabetisch ordnen/anzeigen lassen..?
mysql-> vorherigen+nächsten eintrag, alphabetisch haben will
Fotos am Mac sortieren
|
 |