按文件类型对文件管理器数组进行排序
Sorting a file manager array by file type
我正在为我的用户创建一个文件管理器,它现在非常基本,可以列出他们目录中的每个文件夹和文件。
<?PHP
function getFileList($dir)
{
// array to hold return value
$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")
);
} elseif(is_readable("$dir$entry")) {
$retval[] = array(
"name" => "$dir$entry",
"type" => mime_content_type("$dir$entry"),
"size" => filesize("$dir$entry"),
"lastmod" => filemtime("$dir$entry")
);
}
}
$d->close();
return $retval;
}
?>
然后它将此信息回显到响应式 table:
<table class="table table-striped table-bordered table-hover" id="dataTables-example">
<thead>
<tr>
<th>Select</th>
<th>Filename</th>
<th>Type</th>
<th>Last Modified</th>
<th>Size</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?
$dirlist = getFileList("../test/".$ref."");
// output file list in HTML TABLE format
foreach($dirlist as $file) {
$files = $file['name'];
$tmp = explode('../test/'.$ref.'/', $files);
$filename = end($tmp);
$filenames = rtrim($filename, '/');
?>
<tr class="odd gradeX">
<td><input type="checkbox" name="test" value="test"></td>
<td><a href="<? if($file['type'] == 'dir'){ echo 'user_filemanager.php?ref='.$ref.'/'.$filenames.''; } else { echo 'http://mysite.co.uk/test/'.$ref.'/'.$filenames.''; } ?>"><? echo $filenames; ?></a></td>
<td><? echo $file['type']; ?></td>
<td class="center"><? echo date('r', $file['lastmod']) ?></td>
<td class="center"><? echo $file['size']; ?></td>
<td class="center">X</td>
</tr>
<?
}
?>
</tbody>
</table>
我遇到的问题是它随机输出数据。我希望它首先显示所有目录。在列出文件之前。所以所有目录都在最上面。这可能吗?目录当前显示为 dir
来自 $file['type'];
在您的案例中 usort
的简单示例是:
function getFileList($dir)
{
// code here
// sort by `type` key:
usort($retval, function($a, $b) { return $a['type'] == 'dir'? -1 : 1; });
return $retval;
}
我正在为我的用户创建一个文件管理器,它现在非常基本,可以列出他们目录中的每个文件夹和文件。
<?PHP
function getFileList($dir)
{
// array to hold return value
$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")
);
} elseif(is_readable("$dir$entry")) {
$retval[] = array(
"name" => "$dir$entry",
"type" => mime_content_type("$dir$entry"),
"size" => filesize("$dir$entry"),
"lastmod" => filemtime("$dir$entry")
);
}
}
$d->close();
return $retval;
}
?>
然后它将此信息回显到响应式 table:
<table class="table table-striped table-bordered table-hover" id="dataTables-example">
<thead>
<tr>
<th>Select</th>
<th>Filename</th>
<th>Type</th>
<th>Last Modified</th>
<th>Size</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?
$dirlist = getFileList("../test/".$ref."");
// output file list in HTML TABLE format
foreach($dirlist as $file) {
$files = $file['name'];
$tmp = explode('../test/'.$ref.'/', $files);
$filename = end($tmp);
$filenames = rtrim($filename, '/');
?>
<tr class="odd gradeX">
<td><input type="checkbox" name="test" value="test"></td>
<td><a href="<? if($file['type'] == 'dir'){ echo 'user_filemanager.php?ref='.$ref.'/'.$filenames.''; } else { echo 'http://mysite.co.uk/test/'.$ref.'/'.$filenames.''; } ?>"><? echo $filenames; ?></a></td>
<td><? echo $file['type']; ?></td>
<td class="center"><? echo date('r', $file['lastmod']) ?></td>
<td class="center"><? echo $file['size']; ?></td>
<td class="center">X</td>
</tr>
<?
}
?>
</tbody>
</table>
我遇到的问题是它随机输出数据。我希望它首先显示所有目录。在列出文件之前。所以所有目录都在最上面。这可能吗?目录当前显示为 dir
来自 $file['type'];
在您的案例中 usort
的简单示例是:
function getFileList($dir)
{
// code here
// sort by `type` key:
usort($retval, function($a, $b) { return $a['type'] == 'dir'? -1 : 1; });
return $retval;
}