我遇到了问题,我不知道如何描述它,所以我会直接看到代码:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
他收到的内容如下:
C:\ XAMPP \ htdocs中\包括\测试\ aa.txt文件
C:\ XAMPP \ htdocs中\包括\测试\ cc.txt
C:\ XAMPP \ htdocs中\包括\测试\ ccc.txt
C:\ XAMPP \ htdocs中\包括\测试\ file.txt的
C:\ XAMPP \ htdocs中\包括\测试\ test.php的
C:\ XAMPP \ htdocs中\包括\测试\ test2.php
C:\ XAMPP \ htdocs中\的index.php
C:\ XAMPP \ htdocs中\ file.txt的
C:\ XAMPP \ htdocs中\ sth.txt
我希望收到类似的内容:
C:\ XAMPP \ htdocs中\ file.txt的
C:\ XAMPP \ htdocs中\的index.php
C:\ XAMPP \ htdocs中\ sth.txt
C:\ XAMPP \ htdocs中\包括\测试\ aa.txt文件
C:\ XAMPP \ htdocs中\包括\测试\ cc.txt
C:\ XAMPP \ htdocs中\包括\测试\ ccc.txt
C:\ XAMPP \ htdocs中\包括\测试\ file.txt的
C:\ XAMPP \ htdocs中\包括\测试\ test.php的
C:\ XAMPP \ htdocs中\包括\测试\ test2.php
我怎么能收到这样的东西?提前感谢您的每一个答案。
答案 0 :(得分:1)
从@Ghost略微改进版本以关注子结构内的排序:
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('./', RecursiveDirectoryIterator::SKIP_DOTS));
$files = new RegexIterator($iterator, '/\.(html|php|phtml|storage|tmp|txt|ini)*$/i');
$data = array();
foreach($iterator as $file) {
$depth = $files->getDepth(); // get depth
$data[$depth][] = $file->getRealpath(); // push depth inside another dimension with the file
}
// this is necessary that items within the depth are sorted correctly, first sort by key (the depth) than sort by name
ksort($data);
foreach ($data as $depthArray){
sort($depthArray);
}
$data = call_user_func_array('array_merge', $data); // flatten all items
// use data
当目录包含许多子目录时,这仍然会有问题。这个例子:
a\b.html
downtheway\a.html
a\a.html
a\sub1\c.sorted
会像这样解决:
a\b.html
a\a.html
downtheway\a.html // wrong
a\sub1\c.html
因为算法只考虑了深度和
a\sub1\c.html
比
更深downtheway\a.html
@Trawlr:这对您的用例是否正确,或者应该像这样排序:
a\b.html
a\a.html
a\sub1\c.html
downtheway\a.html
旧答案并不是OP所要求的。
仅对数组使用常规sort
。这应该没有问题。
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('./', RecursiveDirectoryIterator::SKIP_DOTS));
$files = new RegexIterator($iterator, '/\.(html|php|phtml|storage|tmp|txt|ini)*$/i');
$array = array();
foreach($files as $file){
$array[] = $file->getRealpath();
}
sort($array, SORT_STRING);
//output array
您还可以将SORT_STRING
与SORT_FLAG_CASE
结合使用,以忽略字符串的大小写。看起来像这样:
sort($array, SORT_STRING | SORT_FLAG_CASE );
答案 1 :(得分:1)
如果我正确理解您的问题,您希望按文件的深度对它们进行排序,您可以使用->getDepth
方法获取当前深度,并将它们分配给文件的每个组。首先将它们分组,最后只需将它们合并,你们就可以将它们排成一行。
以下是这个想法:
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('./', RecursiveDirectoryIterator::SKIP_DOTS));
$files = new RegexIterator($iterator, '/\.(html|php|phtml|storage|tmp|txt|ini)*$/i');
$data = array();
foreach($iterator as $file) {
$depth = $files->getDepth(); // get depth
$data[$depth][] = $file->getRealpath(); // push depth inside another dimension with the file
}
$data = call_user_func_array('array_merge', $data); // flatten all items