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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: readdir но не по алфавиту, а по типу

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Itan
Отправлено: 18 Ноября, 2011 - 14:17:22
Post Id


Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Здравствуйте!
Скрипт работает так:
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') вывод;
}

А есть что-то попроще?

(Отредактировано автором: 18 Ноября, 2011 - 14:48:34)

 
 Top
EuGen Администратор
Отправлено: 18 Ноября, 2011 - 14:58:57
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Как пример:
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


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB