mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 25.04.2024 15:53 Benutzername: Passwort: Auto-Login

Thema: [PHP] Verzechnis auslesen + alphabetisch sortieren vom 29.06.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [PHP] Verzechnis auslesen + alphabetisch sortieren
Seite: 1, 2  Weiter
Autor Nachricht
synni
Threadersteller

Dabei seit: 31.07.2003
Ort: koeln
Alter: 38
Geschlecht: Männlich
Verfasst Fr 29.06.2007 10:20
Titel

[PHP] Verzechnis auslesen + alphabetisch sortieren

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Fr 29.06.2007 10:23
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden
Anzeige
Anzeige
Kraat

Dabei seit: 05.10.2006
Ort: Köln
Alter: 42
Geschlecht: Männlich
Verfasst Fr 29.06.2007 11:05
Titel

Antworten mit Zitat Zum Seitenanfang

array_multisort() heißt das Stichwort

zu finden unter http://de.php.net/array_multisort *zwinker*
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Fr 29.06.2007 11:21
Titel

Antworten mit Zitat Zum Seitenanfang

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.)
  View user's profile Private Nachricht senden
synni
Threadersteller

Dabei seit: 31.07.2003
Ort: koeln
Alter: 38
Geschlecht: Männlich
Verfasst Fr 29.06.2007 11:25
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Sa 30.06.2007 20:14
Titel

Antworten mit Zitat Zum Seitenanfang

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" );
  View user's profile Private Nachricht senden
bugzz

Dabei seit: 08.08.2009
Ort: -
Alter: 38
Geschlecht: Männlich
Verfasst Sa 08.08.2009 17:57
Titel

Antworten mit Zitat Zum Seitenanfang

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 :
Code:
1

Jap, richtig - EINE EINS. Au weia! *Huch* * Keine Ahnung... *

Kann mir bitte jemand erklären warum das so ist und was mache ich falsch ?
  View user's profile Private Nachricht senden
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Sa 08.08.2009 18:55
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen PHP: Textdatei auslesen und sortieren, wie?
[PHP] alphabetisch ordnen
Alphabetisch geordnete Liste - wie?
mysql-> vorherigen+nächsten eintrag, alphabetisch haben will
Links in Dreamweaver alphabetisch ordnen/anzeigen lassen..?
Daten sortieren
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.