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 :: Версия для печати :: Извлечение названий файлов из каталога
Форумы портала PHP.SU » » Вопросы новичков » Извлечение названий файлов из каталога

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

1. serg502 - 11 Февраля, 2016 - 06:49:03 - перейти к сообщению
Здраствуйте.
Есть код, генерирующий меню по названию файлов:
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.

Как отсортировать файлы по имени?
2. rasschitai - 11 Февраля, 2016 - 08:10:16 - перейти к сообщению
из цикла уберите вывод, а за его пределами отсортируйте массив и потом его выведите
3. serg502 - 11 Февраля, 2016 - 11:27:51 - перейти к сообщению
Можете подсказать как отсортировать массив?
4. serg502 - 11 Февраля, 2016 - 22:07:19 - перейти к сообщению
Может кто то помочь?

Пожалуйста.
5. Viper - 11 Февраля, 2016 - 23:31:11 - перейти к сообщению
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. }


на замену вашим костылям.
6. serg502 - 13 Февраля, 2016 - 18:13:04 - перейти к сообщению
Спасибо большое.

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

echo buildMenu();

 

Powered by ExBB FM 1.0 RC1