2013-07-07 2 views
0

Я показываю список каталогов. Я пытаюсь получить файлы, отсортированные по имени файла, но также сортироваться по их расширению.PHP - Сортировка данных после первоначального сортировки

Перед дисплеем ...
    - сортировка по имени файла первого
    - то сортировать по расширению в рамках такого рода

Пример:
a_first.jpg
a_first.png
a_first. zip
b_second.doc
b_second.gif
b_second.jpg

<?php 
function getFileExt($filename) { 
    return substr(strrchr($filename,'.'),1); 
} 

$handle=opendir(dirname(__FILE__)); 

while (($file = readdir($handle))!==false) { 
    $fileExt = strtolower(getFileExt($file)); 
    if(in_array($file, $ignore_file_list)) { continue; } 
    if(in_array($fileExt, $ignore_ext_list)) { continue; } 
    if(is_dir($file)) { $fileExt = "dir"; } 

/* 
HERE: 

Before display... 
    - sort by filename first 
    - then sort by extension within this sort 

Example: 
    a_first.jpg 
    a_first.png 
    a_first.zip 
    b_second.doc 
    b_second.gif 
    b_second.jpg 
*/ 

    echo ' 
<div><a href='.$file.' class='.$fileExt.'>&nbsp;</a></div> 
<div><a href='.$file.'>$file</a></div> 
'; 
} 

closedir($handle); 
?> 

Я не уверен, если мне нужно сделать второй вид (= расширения файлов) в пределах при использовании FOREACH или сделать FOREACH вне WHILE (ставить данные в массив сначала) или это ситуация с сортировкой нескольких массивов или ... ???

FYI: Использование базы данных для этого не является вариантом.

Любая помощь приветствуется.

+0

Сплит файлы по имени и типа файла в массив и отсортировать массив затем присоединитесь к ним вместе –

ответ

0

вы можете использовать glob вместе с natcasesort.

$files = glob($directory."/*.*"); 
// for just the files names 
$files = array_map("basename", $files); 
natcasesort($files); 

Если вы хотите, чтобы ограничить результаты элементов с определенными расширениями, вы бы изменить Глоб вызов

$files = glob($directory."/*.{jpg,png,zip}", GLOB_BRACE); 
+0

Удивительный! Для моего обучения вы можете немного объяснить код? Например ... переменная «$ directory» отсутствует в моем коде. Является ли ваш код специфичным для моего кода или это пример? Вы сначала сортируете расширения, а затем имя файла или ...? ... и должен ли быть введен ваш фрагмент кода, где моя «ЗДЕСЬ» отображается в моем примере? Благодарю. – mar2195

+0

первая строка просто втягивает список файлов почти так, как если бы вы делали команду ls или dir из командной строки и возвращали массив. вторая команда получает только часть имени файла имени файла (glob дает вам путь, как вы его выражали). natcasesort делает «человеческий» вид массива ... в конце вы должны просто пройти массив и вывести свой html. – Orangepill

+0

_ первая строка просто втягивает список файлов почти так, как если бы вы делали команду ls или dir из командной строки и возвращали массив_ ... Так что переменная «$ directory» конкретно не относится к моему коду? – mar2195

0
foreach ($example as $value) { 
    $file[] = $value; 
//regex would be better incase you have files with more than one period 
    list($ext, $nam) = explode('.'$value); 
    $extention[] = $ext; 
    $name[] = $nam; 
} 

a_sort($extention); 
a_sort($name); 


foreach($extention as $key=>$value){ 
    echo $file[$key]."<br/>"; 
} 

foreach($name as $key=>$value){ 
    echo $file[$key]."<br/>"; 
} 
+0

Что касается моего примера кода ... Был ли ваш код выше размещен внутри WHILE или после WHILE? – mar2195

Смежные вопросы