吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 894|回复: 9
收起左侧

[求助] php遍历文件夹下所有文件然后怎么按名称排序

[复制链接]
MrLiuxs 发表于 2022-5-15 12:55
50吾爱币
大佬们帮小弟看下
小弟现在读到的文件都是乱序,有没有办法能按名称排序




<?php
function my_dir($dir) {
    $files = [];
    if(@$handle = opendir($dir)) {
        while(($file = readdir($handle)) !== false) {
            if($file != ".." && $file != ".") {
                if(is_dir($dir . "/" . $file)) { //如果是子文件夹,进行递归
                    $files[$file] = my_dir($dir . "/" . $file);
                } else {
                    $files[] = $file;
                }
            }
        }
        closedir($handle);
    }
    return $files;
}
$varyy=(my_dir("./"));
for ($i=0; $i < count($varyy); $i++) {
    if($i>0){
    echo "=====";
    }
    echo $varyy[$i];
    }



最佳答案

查看完整内容

简单,用sort函数 加上 整个代码 [mw_shl_code=php,true]

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hackerbob 发表于 2022-5-15 12:55
本帖最后由 hackerbob 于 2022-5-15 21:00 编辑

简单,用sort函数
加上
[PHP] 纯文本查看 复制代码
sort($varyy);

整个代码
[PHP] 纯文本查看 复制代码
<?php
function my_dir($dir) {
    $files = [];
    if(@$handle = opendir($dir)) {
        while(($file = readdir($handle)) !== false) {
            if($file != ".." && $file != ".") {
                if(is_dir($dir . "/" . $file)) { //如果是子文件夹,进行递归
                    $files[$file] = my_dir($dir . "/" . $file);
                } else {
                    $files[] = $file;
                }
            }
        }
        closedir($handle);
    }
    return $files;
}
$varyy=(my_dir("./"));
sort($varyy);//加上这一句
for ($i=0; $i < count($varyy); $i++) {
    if($i>0){
    echo "=====";
    }
    echo $varyy[$i];
    }
 楼主| MrLiuxs 发表于 2022-5-15 19:03
hackerbob 发表于 2022-5-15 18:59
简单,用sort函数
加上

不行呀大佬 ,加上后 遍历不了了,就显示一行 <br/>.
yuechenxing 发表于 2022-5-16 08:25
 楼主| MrLiuxs 发表于 2022-5-16 09:55
yuechenxing 发表于 2022-5-16 08:25
自写插入排序,还有,不要用递归。

可以具体点吗大佬,小白不会弄
小迷糊 发表于 2022-5-18 17:34
[PHP] 纯文本查看 复制代码
function my_dir($dir)
{
    $dh = @opendir($dir);             //打开目录,返回一个目录流     $return = array();
    while ($file = @readdir($dh)) {     //循环读取目录下的文件
        if ($file != '.' and $file != '..') {
            $path = $dir . '/' . $file;     //设置目录,用于含有子目录的情况
            if (is_dir($path)) {
            } elseif (is_file($path)) {
                $filename[] = $path;//获取文件名称
                $return[] = '/' . $file;
            }
        }
    }
    @closedir($dh);             //关闭目录流
    array_multisort($filename, SORT_ASC, SORT_STRING, $return);//按名字排序
    return $return;               //返回文件
}
$dir = "C:/phpStudy/PHPTutorial/WWW/test";   //本地路径
$test = my_dir($dir);
print_r($test);


效果图:
image.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
MrLiuxs + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| MrLiuxs 发表于 2022-5-18 19:26
小迷糊 发表于 2022-5-18 17:34
[mw_shl_code=php,true]
function my_dir($dir)
{

大佬你好,我用这个也是只显示一行显示一行 <br/>,我这个php文件在宝塔服务器,我刚才修改了那个本地路径也是不行,我是 软件读取服务器里面的文件,我之前那个可以用就是乱序,大佬能帮忙再看看吗,小白
yuechenxing 发表于 2022-5-18 21:57
MrLiuxs 发表于 2022-5-16 09:55
可以具体点吗大佬,小白不会弄

文件夹结构本质就是一个有N个顶级节点的树,首先把问题拆解
1. 遍历文件夹内容
2. 文件夹内文件按照名称排序
幸运的是,树形结构有个特点。假设每次都是完全读取完上一个文件夹内容后再读取下一个文件夹,直到本目录文件夹全部读取完成。虽然文件夹会有很多层,但是按照这个逻辑遍历,那么整个树就会被展开。关键在于如何确保读取完一个文件夹后继续读取这个文件夹同级的下一个文件/文件夹。方法很简单,模拟“栈“来实现。只要读取到文件夹,那么将文件夹名称以及文件夹下级所有文件压入栈顶,下次读取到的就是下级文件夹的第一个文件,如果下级文件夹的第一个文件还是文件夹则继续这套逻辑。使用后缀数字作为层级标识,顺序应该是这样的
dir1.1 ---dir2.1 ---dir3.1--file4.1--file4.2---file4.3---file3.2--file2.2--file1.2
这样做其实也是有利于排序的,因为这种遍历方式是由内及外遍历。每当一个文件夹遍历完成,层级-1的时候,此时整个文件夹已经遍历完成,可以在这个时机进行排序。授人以鱼不如授人以渔(其实是懒得写
小迷糊 发表于 2022-5-19 09:39
MrLiuxs 发表于 2022-5-18 19:26
大佬你好,我用这个也是只显示一行显示一行 ,我这个php文件在宝塔服务器,我刚才修改了那个本地路径也是 ...

image.png

image.png

这个还需要咋看,返回的是数组 foreach 一下,注解也写的很清楚了
 楼主| MrLiuxs 发表于 2022-5-19 11:19
小迷糊 发表于 2022-5-19 09:39
这个还需要咋看,返回的是数组 foreach 一下,注解也写的很清楚了

谢谢大佬!我刚才用上面那个       
sort($varyy);
解决啦!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-10 23:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表