问题很简单。array_reverse()
不通过引用修改。您正在混淆sort()
ing 函数的行为。相反,您只需要使用它生成的返回值。也就是说,有更好的方法。继续阅读...
自 PHP5.4 起,rsort($array, SORT_NATURAL)
将以 DESC 顺序对数组进行排序,并将连续数字视为数字而不是字符串。这是一种比natsort()
ing 然后array_reverse()
ing 更直接和简洁的方式技术。
( Demo )
( Demo with .jpg
extensions )
( Demo with static string before numbers )
我建议使用glob()
扫描您的目录。这样您就可以.png
在同一个调用中添加过滤器。
$dir = 'dead_dir/dead_content/';
$filepaths = glob($dir . '*.png');
rsort($filepaths, SORT_NATURAL);
foreach ($filepaths as $filepath) {
echo '<img src="' . $filepath . '" />';
}
如果您宁愿省略路径而只返回文件名,只需更改您当前的工作目录即可。
chdir('dead_dir/dead_content');
$filenames = glob('*.png');
rsort($filenames, SORT_NATURAL);
foreach ($filenames as $filename) {
echo "<div>.png filename => $filename</div>";
}
现在,如果您需要对文件名进行更专业的处理,那么自定义排序功能可能会很好地为您服务。
如以下代码段所示,spaceship 运算符将自动神奇地将 juggle 数字字符串键入为整数,并给出与上述解决方案相同的结果rsort()
。使用 spaceship 算子还是比natsort()
then更直接array_reverse()
。
代码:(演示)
$filenames = ["10", "1", "100", "1000", "20", "200", "2"];
usort($filenames, function($a, $b) {
return $b <=> $a;
});
var_export($filenames);
输出:
array (
0 => '1000',
1 => '200',
2 => '100',
3 => '20',
4 => '10',
5 => '2',
6 => '1',
)
如果您的文件名有前导或尾随非数字字符,您可以在比较usort()
.
如果有人不熟悉自定义排序如何与宇宙飞船操作员一起工作......
- 要实现 ASC 顺序,请编写
$a <=> $b
.
- 要实现 DESC 命令,请编写
$b <=> $a
.