У меня есть каталог: Audio/
и в этом будут только файлы mp3. Я хочу автоматизировать процесс создания ссылок на эти файлы. Есть ли способ прочитать каталог и добавить имена файлов в этом каталоге в массив?
Было бы вдвойне здорово, если бы мы могли создать ассоциативный массив, и ключ должен быть именем файла минус тег .mp3.
Есть идеи?
Чтобы уточнить: у меня есть несколько Audio/
папок, и каждая папка содержит mp3-файлы другого события. Информация о мероприятии извлекается из базы данных и заполняется таблицей. Вот почему я дублирую код, потому что прямо сейчас в каждой Audio/
папке мне нужно определить имена файлов для ссылок для загрузки и определить имена файлов для mp3-плеера.
Спасибо! Это значительно упростит мой код, так как прямо сейчас я повторяю тонны кода снова и снова!
Путь SPL с помощью DirectoryIterator :
$files = array(); foreach (new DirectoryIterator('/path/to/files/') as $fileInfo) { if($fileInfo->isDot() || !$fileInfo->isFile()) continue; $files[] = $fileInfo->getFilename(); }
И для полноты: вы также можете использовать glob :
$files = array_filter(glob('/path/to/files/*'), 'is_file');
Это вернет все файлы (но не папки), вы можете при необходимости адаптировать их.
Чтобы получить только имена файлов (вместо файлов с полным путем), просто добавьте:
$files = array_map('basename', $files);
Да: используйте scandir()
. Если вам просто нужно имя файла без расширения, используйте basename()
для каждого элемента массива, который вы получили из scandir()
.
Это должно быть в состоянии сделать то, что вы ищете:
// Read files $files = scandir($dirName); // Filter out non-files ('.' or '..') $files = array_filter($files, 'is_file'); // Create associative array ('filename' => 'filename.mp3') $files = array_combine(array_map('basename', $files), $files);
Конечно … Я думаю, что это должно сработать …
$files[] = array(); $dir = opendir("/path/to/Audio") or die("Unable to open folder"); while ($file = readdir($dir)) { $cleanfile = basename($file); $files[$cleanfile] = $file; } closedir($dir);
Я думаю, это должно работать …
$results = array(); $handler = opendir($directory); while ($file = readdir($handler)) { if ($file != "." && $file != "..") { $results[] = $file; } } closedir($handler);
это должно работать, если вы хотите, чтобы любые файлы были исключены из массива, просто добавьте их в оператор if, то же самое для расширений файлов