如何自然地对文件名数组进行排序?

问题描述 投票:0回答:2

我有一个想要排序的数组,它包含带有文件扩展名的图像,文件名是数字,文件扩展名显然是一个字符串。

$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
)
php arrays sorting filenames natural-sort
2个回答
4
投票

最快最简单的方法是使用

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() 进行更改。


0
投票
$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
)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.