PHP使用glob获取目录文件夹后如何按名称数值顺序排序
解决方案
你遇到的是字典序排序和数值自然排序的差异问题:glob()默认返回的目录列表按照字符串字典规则排序,会出现1、10、11…2、20这类不符合数值顺序的结果,使用PHP内置的自然排序函数natsort()即可解决,同时你原有代码存在多余的</a>闭合标签错误,也同步修正:
// 先获取所有目标目录存入数组 $dirs = glob('C:\xampp\htdocs\myweb\central/folders/*', GLOB_ONLYDIR); // 对数组进行自然排序,按名称中的数值大小排列 natsort($dirs); // 遍历排序后的数组输出按钮 foreach($dirs as $dir) { $dir = basename($dir); $button = "<button class='items'>$dir</button>"; echo $button; }
如果需要按数值从大到小倒序排列,在natsort($dirs);后加一行$dirs = array_reverse($dirs);即可。
如果你的文件夹名称是纯数字格式,也可以使用自定义数值排序实现更严格的匹配,替换上述natsort($dirs);行即可:
usort($dirs, function($a, $b) { return intval(basename($a)) - intval(basename($b)); });
内容的提问来源于stack exchange,提问作者Bob D. Builder
相关产品推荐
相关产品推荐

