Я пытаюсь сделать scandir();
функция выходит за пределы ее письменных ограничений, мне нужно больше, чем альфа-сортировка, которую он в настоящее время поддерживает. Мне нужно отсортировать scandir();
результаты сортируются по дате изменения.
Я пробовал несколько решений, которые я нашел здесь, и некоторые другие решения с разных сайтов, но никто не работал для меня, поэтому я считаю, что для меня целесообразно публиковать здесь.
То, что я пробовал до сих пор, заключается в следующем:
function scan_dir($dir) { $files_array = scandir($dir); $img_array = array(); $img_dsort = array(); $final_array = array(); foreach($files_array as $file) { if(($file != ".") && ($file != "..") && ($file != ".svn") && ($file != ".htaccess")) { $img_array[] = $file; $img_dsort[] = filemtime($dir . '/' . $file); } } $merge_arrays = array_combine($img_dsort, $img_array); krsort($merge_arrays); foreach($merge_arrays as $key => $value) { $final_array[] = $value; } return (is_array($final_array)) ? $final_array : false; }
Но, похоже, это не работает для меня, оно возвращает только 3 результата, но должно возвращать 16 результатов, потому что в папке 16 изображений.
Любая идея, как решить эту проблему?
Благодарю.
function scan_dir($dir) { $ignored = array('.', '..', '.svn', '.htaccess'); $files = array(); foreach (scandir($dir) as $file) { if (in_array($file, $ignored)) continue; $files[$file] = filemtime($dir . '/' . $file); } arsort($files); $files = array_keys($files); return ($files) ? $files : false; }
Я думаю, что проблема в вашем исходном коде – это несколько файлов, которые могут иметь такую же дату и время изменения, поэтому при объединении массивов несколько файлов с одной и той же датой и временем изменения будут перезаписаны, и вы получите только одну запись в конечном массиве для этой метки времени ,
Альтернативный пример ..
$dir = "/home/novayear/public_html/backups"; chdir($dir); array_multisort(array_map('filemtime', ($files = glob("*.{sql,php,7z}", GLOB_BRACE))), SORT_DESC, $files); foreach($files as $filename) { echo "<a>".substr($filename, 0, -4)."</a><br>"; }