Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: readdir но не по алфавиту, а по типу
Форумы портала PHP.SU » » Работа с файловой системой и файлами » readdir но не по алфавиту, а по типу

Страниц (1): [1]
 

1. Itan - 18 Ноября, 2011 - 14:17:22 - перейти к сообщению
Здравствуйте!
Скрипт работает так:
PHP:
скопировать код в буфер обмена
  1. $dir = $_SERVER['DOCUMENT_ROOT']."/dir/";
  2. if (is_dir($dir)) {
  3.    if ($dh = opendir($dir)) {
  4.        while (($file = readdir($dh)) !== false) {
  5.            print "Файл: $file : тип: " . filetype($dir . $file) . "\n";
  6.        }
  7.        closedir($dh);
  8.    }
  9. }


Выводит примерно так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. Файл: аааа.php : тип: file
  2. Файл: img : тип: dir
  3. Файл: index.php : тип: file
  4. Файл: ooooo.php : тип: file
  5. Файл: pppp : тип: dir
  6.  


Т.е. сортировка идет по алфавиту. А как сделать, чтобы сортировка была в зависимости от типа? Мне нужно, чтобы тип "dir" был сверху, перед файлами.
(Добавление)
Т.е. нужно как-то отсортировать. Есть такой вариант: записывать во вложенные массивы:

array(array(name, type), array(name,type))
А потом делать вывод:
for ($i=0; $i<count(array); $i++) {
if (array[$i][1] == 'dir') вывод;
}

А есть что-то попроще?
2. EuGen - 18 Ноября, 2011 - 14:58:57 - перейти к сообщению
Как пример:
PHP:
скопировать код в буфер обмена
  1. $dir     = '/path/to/dir';
  2. $rgFiles = glob($dir.'/*');
  3. usort($rgFiles, function($x, $y)
  4. {
  5.    if(filetype($x) == filetype($y))
  6.    {
  7.       return strcmp($x, $y);
  8.    }
  9.    return strcmp(filetype($x), filetype($y));
  10. });
  11. //print_r($rgFiles);

На PHP<5.3 вместо замыкания можно использовать create_function

 

Powered by ExBB FM 1.0 RC1