ftp_rawlist mit array_multisort sortieren geht nur bedingt

chris4712

Erfahrenes Mitglied
Hallo!

Ich wollte den Inhalt eines Verzeichnisses via FTP (ftp_rawlist) auslesen, und dann so sortieren das erst die Ordner in alphabetischer Reihenfolge sind, und danach die Dateien kommen.
Klappt nur nicht so ganz. Einige Dateien sind total durcheinander.

PHP:
      // List alle Dateien in ein Array
      $InFolderList = ftp_rawlist($conn_id, "");
      
      // Einzelne Zeilen aufteilen
      foreach ($InFolderList AS $data)
        $List[] = preg_split("/[\s]+/", $data, 9, PREG_SPLIT_NO_EMPTY);

      // Sortiert das Array nach alphabetisch nach Ordnern, danach Alphabetisch nach Dateien
      foreach ($List as $key => $row) {
        $type[$key] = $row[0];
        $file[$key] = $row[8];
      }
      array_multisort($type, SORT_DESC, $file, SORT_ASC, $List);

Also irgendwas macht er, wenn ich array_multisort($type, SORT_DESC, $file, SORT_DESC, $List); schreibe, wir die Dateiliste andersherum ausgegeben.
Trotzdem gibt es z.B. eine Datei namens default.jpg die immer nach Dateien mit W am Anfang kommt :rolleyes:

Was mache ich falsch?

Grüße!
 
zeig mal was der var_dump() auf $InFolderList und $list ausgibt. Dann sehen wir mal was kommt und können uns über die Sortierung Gedanken machen
PHP:
//vor dem 2en foreach:
var_dump($InFolderList, $list);
//Die Ausgabe hier im Forum posten
 
OK, du hast es so gewollt :)

Code:
array(23) {
  [0]=>
  string(57) "drwxr-xr-x   4 username ftpusers     4096 Jun 21 21:54 ."
  [1]=>
  string(58) "drwxr-xr-x   7 username ftpusers     4096 Jun  8 09:49 .."
  [2]=>
  string(69) "-rw-r--r--   1 username ftpusers   261284 Apr 20 18:21 Aktuelles.jpg"
  [3]=>
  string(73) "-rw-r--r--   1 username ftpusers   280878 Apr 20 18:21 Angi-auf-Holz.jpg"
  [4]=>
  string(77) "-rw-r--r--   1 username ftpusers   294861 Apr 20 18:21 Ausbildungsgruppe.jpg"
  [5]=>
  string(68) "-rw-r--r--   1 username ftpusers   248528 Mar 31 18:44 DSC00060.jpg"
  [6]=>
  string(70) "-rw-r--r--   1 username ftpusers   238113 Apr 20 18:21 Dalmis_ich.jpg"
  [7]=>
  string(81) "-rw-r--r--   1 username ftpusers   154367 Apr 20 18:21 Dogdancing_Wetzlar001.jpg"
  [8]=>
  string(74) "-rw-r--r--   1 username ftpusers   239729 Apr 20 18:21 Joy_Duncan_ich.jpg"
  [9]=>
  string(74) "-rw-r--r--   1 username ftpusers   161825 Apr 20 18:21 Junghundgruppe.jpg"
  [10]=>
  string(65) "-rw-r--r--   1 username ftpusers   252453 Apr 20 18:21 Kurse.jpg"
  [11]=>
  string(65) "-rw-r--r--   1 username ftpusers   198144 Apr 20 18:21 Minis.jpg"
  [12]=>
  string(74) "-rw-r--r--   1 username ftpusers   315004 Apr 20 18:21 Sommer2006_056.jpg"
  [13]=>
  string(71) "-rw-r--r--   1 username ftpusers   176231 Apr 17 16:35 WelpenbildI.jpg"
  [14]=>
  string(72) "-rw-r--r--   1 username ftpusers   178488 Apr 17 16:35 WelpenbildII.jpg"
  [15]=>
  string(73) "-rw-r--r--   1 username ftpusers   187436 Apr 17 16:35 WelpenbildIII.jpg"
  [16]=>
  string(67) "-rw-r--r--   1 username ftpusers   233129 Apr 20 18:21 default.jpg"
  [17]=>
  string(65) "drwxr-xr-x   3 username ftpusers       72 Jun 21 21:44 documents"
  [18]=>
  string(64) "-rw-r--r--   1 username ftpusers    40039 Feb 28 00:55 home.jpg"
  [19]=>
  string(62) "drwxr-xr-x   4 username ftpusers       60 Jun 21 19:09 images"
  [20]=>
  string(75) "-rw-r--r--   1 username ftpusers   221920 Apr 20 18:21 laufenderDuncan.jpg"
  [21]=>
  string(70) "-rw-r--r--   1 username ftpusers   266787 Apr 20 18:21 meine_drei.jpg"
  [22]=>
  string(64) "-rw-r--r--   1 username ftpusers   343787 Apr 20 18:21 wir4.jpg"
}
array(23) {
  [0]=>
  array(9) {
    [0]=>
    string(10) "drwxr-xr-x"
    [1]=>
    string(1) "4"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(4) "4096"
    [5]=>
    string(3) "Jun"
    [6]=>
    string(2) "21"
    [7]=>
    string(5) "21:54"
    [8]=>
    string(1) "."
  }
  [1]=>
  array(9) {
    [0]=>
    string(10) "drwxr-xr-x"
    [1]=>
    string(1) "7"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(4) "4096"
    [5]=>
    string(3) "Jun"
    [6]=>
    string(1) "8"
    [7]=>
    string(5) "09:49"
    [8]=>
    string(2) ".."
  }
  [2]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "261284"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(13) "Aktuelles.jpg"
  }
  [3]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "280878"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(17) "Angi-auf-Holz.jpg"
  }
  [4]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "294861"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(21) "Ausbildungsgruppe.jpg"
  }
  [5]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "248528"
    [5]=>
    string(3) "Mar"
    [6]=>
    string(2) "31"
    [7]=>
    string(5) "18:44"
    [8]=>
    string(12) "DSC00060.jpg"
  }
  [6]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "238113"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(14) "Dalmis_ich.jpg"
  }
  [7]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "154367"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(25) "Dogdancing_Wetzlar001.jpg"
  }
  [8]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "239729"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(18) "Joy_Duncan_ich.jpg"
  }
  [9]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "161825"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(18) "Junghundgruppe.jpg"
  }
  [10]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "252453"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(9) "Kurse.jpg"
  }
  [11]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "198144"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(9) "Minis.jpg"
  }
  [12]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "315004"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(18) "Sommer2006_056.jpg"
  }
  [13]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "176231"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "17"
    [7]=>
    string(5) "16:35"
    [8]=>
    string(15) "WelpenbildI.jpg"
  }
  [14]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "178488"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "17"
    [7]=>
    string(5) "16:35"
    [8]=>
    string(16) "WelpenbildII.jpg"
  }
  [15]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "187436"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "17"
    [7]=>
    string(5) "16:35"
    [8]=>
    string(17) "WelpenbildIII.jpg"
  }
  [16]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "233129"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(11) "default.jpg"
  }
  [17]=>
  array(9) {
    [0]=>
    string(10) "drwxr-xr-x"
    [1]=>
    string(1) "3"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(2) "72"
    [5]=>
    string(3) "Jun"
    [6]=>
    string(2) "21"
    [7]=>
    string(5) "21:44"
    [8]=>
    string(9) "documents"
  }
  [18]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(5) "40039"
    [5]=>
    string(3) "Feb"
    [6]=>
    string(2) "28"
    [7]=>
    string(5) "00:55"
    [8]=>
    string(8) "home.jpg"
  }
  [19]=>
  array(9) {
    [0]=>
    string(10) "drwxr-xr-x"
    [1]=>
    string(1) "4"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(2) "60"
    [5]=>
    string(3) "Jun"
    [6]=>
    string(2) "21"
    [7]=>
    string(5) "19:09"
    [8]=>
    string(6) "images"
  }
  [20]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "221920"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(19) "laufenderDuncan.jpg"
  }
  [21]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "266787"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(14) "meine_drei.jpg"
  }
  [22]=>
  array(9) {
    [0]=>
    string(10) "-rw-r--r--"
    [1]=>
    string(1) "1"
    [2]=>
    string(9) "username"
    [3]=>
    string(8) "ftpusers"
    [4]=>
    string(6) "343787"
    [5]=>
    string(3) "Apr"
    [6]=>
    string(2) "20"
    [7]=>
    string(5) "18:21"
    [8]=>
    string(8) "wir4.jpg"
  }
}
 
Jepp, ich hab es gewollt *g*

1) Die Items nach Ordner und Dateien aufteilen
2) beide Teile nach Name sortieren
3) Beide Teile wieder zusammensetzen

PHP:
//Keys definieren
$keys = array('chmod', 'type', 'owner', 'group', 'size', 'month', 'day', 'time', 'name');

foreach ($InFolderList AS $data) {
    $info = preg_split("/[\s]+/", $data, 9, PREG_SPLIT_NO_EMPTY);
    //Die Dateiinformationen bennen
    $info = array_combine($keys, $info);
    //2 Arrays führen. Einer mit den Ordern, einer mit den Dateien
    //Dabei wird der Name in Grossbuchstaben als Key gesetzt 
    //(damit die Sortierung etw so aussieht: a B c d E)
    if($info['type'] == 1) $files[strtoupper($info['name'])] = $info;
    else $folders[strtoupper($info['name'])] = $info;
} 

//Arrays nach dem Key sortieren
ksort($folders, SORT_STRING);
ksort($files, SORT_STRING);

//Die 2 Arrays zusammenführen
$items = array_merge($folders, $files);

var_dump($items);
 
Achso, eins ist mir grade noch aufgefallen:
Wenn in dem Verzeichnis keine Datei oder kein Ordner ist, gibt es beim ksort und array_merge Probleme.

Ich habe es nun mal so gelöst:
PHP:
//Arrays nach dem Key sortieren
if (isset($folders) > 0) ksort($folders, SORT_STRING);
if (isset($files)) ksort($files, SORT_STRING);

//Die 2 Arrays zusammenführen
if (isset($folders) AND isset($files))
  $List = array_merge($folders, $files);
else if (isset($folders))
  $List = $folders;
else if (isset($files))
  $List = $files;
else
  $List = "";
 
geht einfacher. Einfach am Anfang $folder und $files als array initialisieren. ksort und array_merge müssen mit leeren Arrays arbeiten können

PHP:
//Keys definieren
$keys = array('chmod', 'type', 'owner', 'group', 'size', 'month', 'day', 'time', 'name');

//Arrays initialisieren
$files = array();
$folders = array();

foreach ($InFolderList AS $data) {
    $info = preg_split("/[\s]+/", $data, 9, PREG_SPLIT_NO_EMPTY);
    //Die Dateiinformationen bennen
    $info = array_combine($keys, $info);
    //2 Arrays führen. Einer mit den Ordern, einer mit den Dateien
    //Dabei wird der Name in Grossbuchstaben als Key gesetzt 
    //(damit die Sortierung etw so aussieht: a B c d E)
    if($info['type'] == 1) $files[strtoupper($info['name'])] = $info;
    else $folders[strtoupper($info['name'])] = $info;
} 
...
 
Zurück