我有一个想要排序的数组,它包含带有文件扩展名的图像,文件名是数字,文件扩展名显然是一个字符串。
$files = array();
$files[] = '4.jpg';
$files[] = '14.jpg';
$files[] = '1.jpg';
$files[] = '44.jpg';
如果我使用
sort()
,那么我最终会得到以下结果:
sort($files);
print_r($files);
Array
(
[0] => 1.jpg
[1] => 14.jpg
[2] => 4.jpg
[3] => 44.jpg
)
我真正想要的是:
Array
(
[0] => 1.jpg
[1] => 4.jpg
[2] => 14.jpg
[3] => 44.jpg
)
最快最简单的方法是使用
natsort()
- http://php.net/manual/en/function.natsort.php
例如:
natsort($files);
print_r($files);
Array
(
[0] => 1.jpg
[1] => 4.jpg
[2] => 14.jpg
[3] => 44.jpg
)
此函数实现了一种排序算法,该算法以人类的方式对字母数字字符串进行排序,同时维护键/值关联。这被描述为“自然排序”。
您还可以在
sort()
函数中使用 sort_flags 选项
sort($files, SORT_NUMERIC);
print_r($files);
Array
(
[0] => 1.jpg
[1] => 4.jpg
[2] => 14.jpg
[3] => 44.jpg
)
可选的第二个参数 sort_flags 可用于使用这些值修改排序行为:
排序类型标志:
SORT_REGULAR - 正常比较项目(不更改类型)
SORT_NUMERIC - 按数字比较项目
SORT_STRING - 将项目作为字符串进行比较
SORT_LOCALE_STRING - 根据当前区域设置将项目作为字符串进行比较。在 PHP 4.4.0 和 5.0.2 中添加,它使用系统区域设置,可以使用 setlocale() 进行更改。
$files = array();
$files[] = '4.jpg';
$files[] = '14.jpg';
$files[] = '1.jpg';
$files[] = '44.jpg';
sort($files, SORT_NUMERIC);
print_r($files);
Array
(
[0] => 1.jpg
[1] => 4.jpg
[2] => 14.jpg
[3] => 44.jpg
)