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 :: Извлечение названий файлов из каталога

 PHP.SU

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


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

> Без описания
serg502
Отправлено: 11 Февраля, 2016 - 06:49:03
Post Id


Новичок


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


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




Здраствуйте.
Есть код, генерирующий меню по названию файлов:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.                 /**
  3.                  * Генератор меню
  4.                  */
  5.                 $i = 0;
  6.                 //открываем папку с контентом
  7.                 $handle = opendir ('content/');
  8.                 //считываем в цикле названия файлов
  9.                 while($file = readdir($handle)) {
  10.                    //отсекаем ненужные нам файлы и ссылки на директории  
  11.                   if ($file != '.' && $file != '..' && $file != 'default.php'){
  12.                          //считываем первые 500 символов из файла
  13.                         $buffer = file_get_contents('content/'.$file,0,NULL,0,500);
  14.                          //с помощью регулярного выражения извлекаем название для меню
  15.                             preg_match("/<h2>(.*)<\/h2>/",$buffer,$name);
  16.                         //формируем массив названий файлов без расширения .php
  17.                         $func[$i] = substr($file, 0, -4);  
  18.                           //выводим ссылки меню
  19.                           echo " <li><a href='index.php?p=$func[$i]'>$name[1]</a></li> ";
  20.                         $i++;
  21.                   }
  22.                 }
  23.                 closedir($handle);//закрываем директорию
  24.                 ?>


readdir сортирует файлы в том порядке, в котором они хранятся в файловой системе.
Поэтому в меню они выводятся не по имени.

в директории content/ хранятся файлы 01.php, 02.php, .... 08.php.

Как отсортировать файлы по имени?
 
 Top
rasschitai
Отправлено: 11 Февраля, 2016 - 08:10:16
Post Id



Новичок


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


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




из цикла уберите вывод, а за его пределами отсортируйте массив и потом его выведите

(Отредактировано автором: 11 Февраля, 2016 - 08:11:06)

 
 Top
serg502
Отправлено: 11 Февраля, 2016 - 11:27:51
Post Id


Новичок


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


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




Можете подсказать как отсортировать массив?
 
 Top
serg502
Отправлено: 11 Февраля, 2016 - 22:07:19
Post Id


Новичок


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


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




Может кто то помочь?

Пожалуйста.
 
 Top
Viper
Отправлено: 11 Февраля, 2016 - 23:31:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




PHP:
скопировать код в буфер обмена
  1. function buildMenu()
  2. {
  3.         // Путь к папке с файлами
  4.         $path = 'content/';
  5.  
  6.         if (!is_dir($path))
  7.         {
  8.                 return false;
  9.         }
  10.  
  11.         // Выбираем все файлы php с двумя цифрами в имени
  12.         $files_arr = glob($path . '[0-9][0-9].php', GLOB_BRACE);
  13.  
  14.         foreach ($files_arr as $file)
  15.         {
  16.                 $buffer = file_get_contents($file, 0, NULL, 0, 500);
  17.                 preg_match("/<h2>(.*)<\/h2>/", $buffer, $name);
  18.                 $fileinfo = pathinfo($file);
  19.  
  20.                 if (array_key_exists(1, $name) && !empty($name[1]))
  21.                 {
  22.                         echo ' <li><a href="index.php?p=' . $fileinfo['filename'] . '">' . $name[1] . '</a></li> ';
  23.                 }
  24.         }
  25. }


на замену вашим костылям.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
serg502
Отправлено: 13 Февраля, 2016 - 18:13:04
Post Id


Новичок


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


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




Спасибо большое.

Для новичков, таких как я, в конце, за скобками, нужно еще добавить

echo buildMenu();
 
 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