![](/img/trans.png)
[英]Sort and display directory list alphabetically using opendir() in php
[英]Sort and display directory list alphabetically PHP
我想按字母順序對文件進行排序,但是我不知道該怎么做。 我的意思是,我希望目錄將是按ABC順序排列的第一個目錄,然后是按ABC排列的文件之后的目錄。 我嘗試了幾種選擇,但是我做不到。 這是我的代碼:
<?php
$dirlist = getFileList("./members/files/");?>
<table border="1">
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Size</th>
<th>Last Modified</th>
</tr>
</thead>
<tbody>
<?php
// output file list as table rows
foreach($dirlist as $file) {
echo "<tr>\n";
$file['nams'] = basename($file['name']);
$file['nams2'] = pathinfo($file['nams'], PATHINFO_EXTENSION );
$file['nams'] = pathinfo($file['nams'], PATHINFO_FILENAME);
if($file['nams2'] != 'mp4' && $file['nams2'] != '')
{
echo "<td><a href=\"/members/get_file.php?name={$file['nams']}&ext={$file['nams2']}\">",basename($file['name']),"</a></td>\n";
} else if($file['nams2'] != '') {
echo "<td><a href=\"/video.php?name={$file['nams']}\">",basename($file['name']),"</a></td>\n";
} else {
echo "<td><a href=\"#\">",basename($file['name']),"</a></td>\n";
}
echo "<td>{$file['type']}</td>\n";
echo "<td>{$file['size']}</td>\n";
echo "<td>",date('Y-m-d H:i', $file['lastmod']),"</td>\n";
echo "</tr>\n";
}
?>
</tbody>
</table>
<?php
function getFileList($dir, $recurse=false, $depth=false)
{
$retval = array();
// add trailing slash if missing
if(substr($dir, -1) != "/") $dir .= "/";
// open pointer to directory and read list of files
$d = @dir($dir) or die("getFileList: Failed opening directory $dir for reading");
while(false !== ($entry = $d->read())) {
// skip hidden files
if($entry[0] == ".") continue;
if(is_dir("$dir$entry")) {
$retval[] = array(
"name" => "$dir$entry/",
"type" => filetype("$dir$entry"),
"size" => 0,
"lastmod" => filemtime("$dir$entry")
);
if($recurse && is_readable("$dir$entry/")) {
if($depth === false) {
$retval = array_merge($retval, getFileList("$dir$entry/", true));
} elseif($depth > 0) {
$retval = array_merge($retval, getFileList("$dir$entry/", true, $depth-1));
}
}
} elseif(is_readable("$dir$entry")) {
$retval[] = array(
"name" => "$dir$entry",
"type" => mime_content_type("$dir$entry"),
"size" => formatSizeUnits(filesize("$dir$entry")),
"lastmod" => filemtime("$dir$entry")
);
}
}
$d->close();
return $retval;
}
function formatSizeUnits($bytes)
{
if ($bytes >= 1073741824)
{
$bytes = number_format($bytes / 1073741824, 2) . ' GB';
}
elseif ($bytes >= 1048576)
{
$bytes = number_format($bytes / 1048576, 2) . ' MB';
}
elseif ($bytes >= 1024)
{
$bytes = number_format($bytes / 1024, 2) . ' kB';
}
elseif ($bytes > 1)
{
$bytes = $bytes . ' bytes';
}
elseif ($bytes == 1)
{
$bytes = $bytes . ' byte';
}
else
{
$bytes = '0 bytes';
}
return $bytes;
}
?>
您可以使用scandir
以數組形式返回排序的文件列表。
例:
<?php
$directory_list = scandir("./members/files/");
print_r($directory_list);
這將輸出類似於以下內容的目錄列表:
Array
(
[0] => .
[1] => ..
[2] => bar.php
[3] => foo.txt
[4] => somedir
...
)
您可以像這樣按降序對它們進行排序:
print_r($directory_list, SCANDIR_SORT_DESCENDING);
您可以在PHP文檔中找到有關scandir
更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.