我正在显示目录列表。我正在尝试按文件名排序文件,但也按其扩展名排序。
显示之前......
- 首先按文件名排序
- 然后在此类别中按扩展名排序
例如:
a_first.jpg
a_first.png
a_first.zip
b_second.doc
b_second.gif
b_second.jpg
<?php
function getFileExt($filename) {
return substr(strrchr($filename,'.'),1);
}
$handle=opendir(dirname(__FILE__));
while (($file = readdir($handle))!==false) {
$fileExt = strtolower(getFileExt($file));
if(in_array($file, $ignore_file_list)) { continue; }
if(in_array($fileExt, $ignore_ext_list)) { continue; }
if(is_dir($file)) { $fileExt = "dir"; }
/*
HERE:
Before display...
- sort by filename first
- then sort by extension within this sort
Example:
a_first.jpg
a_first.png
a_first.zip
b_second.doc
b_second.gif
b_second.jpg
*/
echo '
<div><a href='.$file.' class='.$fileExt.'> </a></div>
<div><a href='.$file.'>$file</a></div>
';
}
closedir($handle);
?>
我不确定是否需要使用FOREACH在WHILE中进行第二次排序(=文件扩展名),或者在WHILE之外执行FOREACH(将数据首先放入数组)或者这是多阵列排序情况或...... ???
仅供参考:使用数据库不是一种选择。
感谢任何帮助。
答案 0 :(得分:0)
你可以使用glob和natcasesort。
$files = glob($directory."/*.*");
// for just the files names
$files = array_map("basename", $files);
natcasesort($files);
如果您想将结果限制为具有特定扩展名的项目,您可以将glob调用更改为
$files = glob($directory."/*.{jpg,png,zip}", GLOB_BRACE);
答案 1 :(得分:0)
foreach ($example as $value) {
$file[] = $value;
//regex would be better incase you have files with more than one period
list($ext, $nam) = explode('.'$value);
$extention[] = $ext;
$name[] = $nam;
}
a_sort($extention);
a_sort($name);
foreach($extention as $key=>$value){
echo $file[$key]."<br/>";
}
foreach($name as $key=>$value){
echo $file[$key]."<br/>";
}