У меня есть функция, которая берет имя файла из папки, сортирует его по дате, а затем создает ссылку на файл. Однако это работает только в том случае, если в фактическом имени файла есть пробелы между словами. Если я добавляю дефисы в имя файла, порядок по дате работает неправильно.
Имена файлов, которые работают:
Презентация Январь 2011.pdf
Презентация август 2010.pdf
Презентация май 2010.pdf
Если я добавлю дефисы к именам файлов, порядок нарушается:
Презентация-Январь-2011.pdf
Презентация-Август-2010.pdf
Презентация-май-2010.pdf
Как я могу изменить preg_match() так, чтобы он учитывал дефисы? Вот мой код:
$linkdir="documents/presentations";
$dir=opendir("documents/presentations");
$files=array();
while (($file=readdir($dir)) !== false)
{
if ($file != "." and $file != ".." and $file != "index.php")
{
array_push($files, $file);
}
}
closedir($dir);
function date_sort_desc($a, $b)
{
preg_match('/\w+ \d{4}/', $a, $matches_a);
preg_match('/\w+ \d{4}/', $b, $matches_b);
$timestamp_a = strtotime($matches_a[0]);
$timestamp_b = strtotime($matches_b[0]);
if ($timestamp_a == $timestamp_b) return 0;
return $timestamp_a < $timestamp_b;
}
usort($files, 'date_sort_desc');
foreach ($files as $file){
$name = substr($file, 0, strrpos($file, '.'));
$filename = str_replace(" ", "%20", $file);
$name = str_replace("-", " ", $file);
print "<li><a href='/$linkdir/$filename' rel='external'>$name</a></li>";
}
Любая помощь в этом будет высоко оценена.