2016-08-07 32 views
0

Ich versuche etwas zu verstehen. Ich habe die folgende FunktionOrdnerstruktur in alphabetischer Reihenfolge zurückgeben

Ich im Wesentlichen übergeben Sie einen Stammpfad und in erstellt ein Array mit der Verzeichnisstruktur wie so.

$fileData = $this->fillArrayWithFileNodes(new DirectoryIterator(public_path(). '/images')); 

Die Ausgabe könnte so etwas wie dieses

array:2 [▼ 
    "folder1" => array:1 [▼ 
    2016 => array:4 [▼ 
     "1" => array:1 [▶] 
     "2" => array:2 [▶] 
     "3" => array:4 [▶] 
     "4" => array:4 [▶] 
    ] 
    ] 
] 

sein Das ist, was mich verwirrt. Wenn ich dies lokal über XAMPP ausführe, wird die Struktur in alphabetischer Reihenfolge zurückgegeben. Das ist zu erwarten, denn wenn ich den Ordner unter Windows sehe, wird er automatisch auf diese Weise angezeigt.

Wenn ich es jedoch auf einen Live-Server setze, ist die Struktur ziemlich zufällig. Ich am Ende mit etwas wie diese

array:2 [▼ 
    "folder1" => array:1 [▼ 
    2016 => array:4 [▼ 
     "2" => array:1 [▶] 
     "4" => array:2 [▶] 
     "3" => array:4 [▶] 
     "1" => array:4 [▶] 
    ] 
    ] 
] 

Ist das der Live-Server mit dem Betriebssystem zu tun auf, die Linux-basiert? Wie kann ich die ganze Zeit alphabetisch schreiben?

Dank

+0

Das Ergebnis hängt vom Inhalt der Variablen $ dir ab. Probieren Sie 'print_r ($ dir);' auf Ihrem System aus, um die Unterschiede zu überprüfen. Wie hast du diese Variable bekommen (PLZ bitte)? – technico

+0

hast du die ksort-funktion ausprobiert? Vielleicht wrap es in eine Funktion um es rekursiv zu nennen? –

+0

Ich zeige den Aufruf, den ich mache, was die Variable $ dir ist. Ich dachte über Ksort nach, nicht sicher, wo ich es platzieren sollte, um es rekursiv zu machen? –

Antwort

1

Für die ksort Lösung Sie so etwas wie tun könnte (vielleicht gibt es etwas einfachere und kürzere):

$fileData = array(
    "folder1" => array(
     "4" => array(
      "test" 
     ), 
     "2" => array(
      "test" 
     ), 
     "3" => array(
      "test" 
     ), 
     "1" => array(
      "test" 
     ), 
     "5" => array(
      "test" 
     ), 
    ) 
); 

function sortYourArray($arr) { 
    ksort($arr); 

    foreach ($arr as $k => $v) { 
     if (is_array($v)) { 
      $arr[$k] = sortYourArray($v); 
     } 
    } 

    return $arr; 
} 

$sortedArray = sortYourArray($fileData); 

print_r($sortedArray); 
1

Diese einfache Änderung

function fillArrayWithFileNodes(DirectoryIterator $dir) 
{ 
    $data = array(); 
    foreach ($dir as $node) 
    { 
     if ($node->isDir() && !$node->isDot()) { 
      $data[$node->getFilename()] = $this->fillArrayWithFileNodes(new DirectoryIterator($node->getPathname())); 
     } else if ($node->isFile()) { 
      $data[] = $node->getFilename(); 
     } 
    } 
    sort($data); 
    return $data; 
} 

scheint zu funktionieren Sie müssen möglicherweise mit den sort() Parametern herumspielen, um genau zu erhalten, was Sie wünschen http://php.net/manual/en/function.sort.php