我正在连接到ftp-server并显示列表中的所有项目。我希望按字母顺序排列该列表。
不应该这样做吗?
// get contents of the current directory
$contents = ftp_nlist($conn_id, $path);
sort($contents);
这是剧本的一部分!
// get contents of the current directory
$contents = ftp_nlist($conn_id, $path);
sort($contents);
print "<ul class='server_list'>";
foreach ($contents as $value) {
$line = str_replace($path, "", $value);
$ext = pathinfo($line, PATHINFO_EXTENSION);
if (strlen($ext) > 0) { //File
print "<li class='file'>";
print "<a href='d.php/?p=". $path . $line."'>$line</a>";
print "</li>";
} else { //Folder
print "<li class='folder'>";
print "<a href='?p=". $path . $line."'>$line</a>";
print "</li>";
}
}
print "</ul>";
此外,我想把所有文件夹放在最上面。所以所有文件夹都应按字母顺序排序,之后所有文件都应列在abc ...
中 排序之前 print_r($contents)
给了我:
Array (
[0] => /userupload/OrderNo_100750_HT
[1] => /userupload/README.txt
[2] => /userupload/anotherfolder
[3] => /userupload/avatar.jpg
[4] => /userupload/subfolder1
)
答案 0 :(得分:1)
你是对的,因为它似乎没有任何效果。
原因很简单:排序区分大小写。考虑到这一点,数组已经排序(小写字母在大写字母后面)。
如果您希望使用不区分大小写的排序,可以使用natcasesort()
:
natcasesort($contents);
print_r($contents);
给出
Array
(
[2] => /userupload/anotherfolder
[3] => /userupload/avatar.jpg
[0] => /userupload/OrderNo_100750_HT
[1] => /userupload/README.txt
[4] => /userupload/subfolder1
)
答案 1 :(得分:0)
首先,natcasesort
将按“自然顺序”排序,不区分大小写。
要将文件夹排序到顶部,您需要询问FTP服务器是否有文件夹,然后将其放入单独的数组中,然后将两个数组合并在一起。似乎使用ftp_rawlist
并解析结果将是最好的方法。
答案 2 :(得分:0)
您需要两个阵列。一个是目录,另一个是文件。然后对每个进行排序。
问题是,你没有PHP中的函数来测试文件是目录或文件的天气。
这是解决方法,可以在php.net上找到:
function ftp_is_dir($dir, $ftpcon) {
// get current directory
$original_directory = ftp_pwd( $ftpcon );
// test if you can change directory to $dir
// suppress errors in case $dir is not a file or not a directory
if ( @ftp_chdir( $ftpcon, $dir ) ) {
// If it is a directory, then change the directory back to the original directory
ftp_chdir( $ftpcon, $original_directory );
return true;
}
else {
return false;
}
}
你可以这样做:
// get contents of the current directory
$contents = ftp_nlist($conn_id, $path);
$dirs = array();
$files = array();
foreach ($contents as $value) {
if (ftp_is_dir($value, $conn_id)) $dirs[] = $value;
else $files[] = value;
}
$contents = array();
sort($dirs);
sort($files);
$contents = array_merge ($dirs, $files);
...