Есть ли простой способ прочитать имена файлов в каталоге и добавить в массив? - PullRequest
3 голосов
/ 18 августа 2010

У меня есть каталог: Audio/, и в нем будут только mp3-файлы. Я хочу автоматизировать процесс создания ссылок на эти файлы. Есть ли способ прочитать каталог и добавить имена файлов в этом каталоге в массив?

Было бы вдвойне круто, если бы мы могли создать ассоциативный массив, и ключом было бы имя файла минус тег .mp3.

Есть идеи?

Для уточнения: у меня на самом деле есть несколько папок Audio/, и каждая папка содержит mp3-файлы разных событий. Детали события извлекаются из базы данных и заполняются таблицей. Вот почему я дублирую код, потому что сейчас в каждой папке Audio/ мне нужно определить имена файлов для ссылок на скачивание и определить имена файлов для mp3-плеера.

Спасибо! Это значительно упростит мой код, так как сейчас я повторяю тонны кода снова и снова!

Ответы [ 6 ]

3 голосов
/ 18 августа 2010

И для полноты: вы также можете использовать glob :

$files = array_filter(glob('/path/to/files/*'), 'is_file'); 

Это вернет все файлы (но не папки), вы можете адаптировать их при необходимости.*

Чтобы получить только имена файлов (вместо файлов с полным путем), просто добавьте:

$files = array_map('basename', $files);
3 голосов
/ 18 августа 2010

Способ SPL - с DirectoryIterator :

$files = array();
foreach (new DirectoryIterator('/path/to/files/') as $fileInfo) {
    if($fileInfo->isDot() || !$fileInfo->isFile()) continue;
    $files[] = $fileInfo->getFilename();
}
1 голос
/ 18 августа 2010
$results = array();
$handler = opendir($directory);
while ($file = readdir($handler)) {
  if ($file != "." && $file != "..") {
    $results[] = $file;
  }
}
closedir($handler);

это должно работать, если вы хотите, чтобы какие-либо файлы были исключены из массива, просто добавьте их в оператор if, то же самое для расширений файлов

1 голос
/ 18 августа 2010

Конечно ... Я думаю, что это должно работать ...

$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);

Я думаю, что это должно работать ...

1 голос
/ 18 августа 2010

Это должно быть в состоянии сделать то, что вы ищете:

// 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);
1 голос
/ 18 августа 2010

Да: используйте scandir().Если вы просто хотите получить имя файла без расширения, используйте basename() для каждого элемента в массиве, который вы получили от scandir().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...