自然地对文件路径字符串数组进行排序

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

我有这个数组:

Array (
    [0] => ../files/flv/1
    [1] => ../files/flv/10
    [2] => ../files/flv/2
    [3] => ../files/flv/3
    [4] => ../files/flv/4
    [5] => ../files/flv/5
    [6] => ../files/flv/6
    [7] => ../files/flv/7
    [8] => ../files/flv/8
    [9] => ../files/flv/9
)

我需要这样排序:

Array (
    [0] => ../files/flv/1
    [1] => ../files/flv/2
    [2] => ../files/flv/3
    [3] => ../files/flv/4
    [4] => ../files/flv/5
    [5] => ../files/flv/6
    [6] => ../files/flv/7
    [7] => ../files/flv/8
    [8] => ../files/flv/9
    [9] => ../files/flv/10
)

我尝试使用

sort($array,SORT_NUMERIC);
,但由于这个前缀而没有运气
../files/flv/

我只知道这个解决方案:

$array2 = array_map('basename', $array);
然后
sort($array2,SORT_NUMERIC);

还有其他不那么复杂的解决方案吗?

php arrays sorting natural-sort
3个回答
4
投票

使用

SORT_NATURAL
代替
SORT_NUMERIC
(需要 PHP 5.4.0 或最新版本):

sort($array, SORT_NATURAL);

编辑:我用这个代码来测试它:

$array = array(
  '../files/flv/1',
  '../files/flv/10',
  '../files/flv/2'
);

sort($array, SORT_NATURAL);
print_r($array);

它输出:

Array
(
    [0] => ../files/flv/1
    [1] => ../files/flv/2
    [2] => ../files/flv/10
)

编辑2:或者您可以使用

natsort()
功能,它也适用于旧版本:

natsort($array);

0
投票

如果“../files/flv/”路径始终相同,您可以尝试在所有元素上使用 str_replace 函数,然后使用数字排序进行排序,然后将相同的路径添加回所有元素。

所以三个步骤是:

  1. 在数组上使用 foreach 循环,并在 ecah 元素上使用 str_replace() 函数。

  2. 像使用数字排序一样进行排序。

  3. 对数组使用 foreach 循环,并将常量路径放回作为前缀。

为了使其更加完美,您可以通过创建自己的函数并将路径作为参数传递来完成此操作。


-1
投票

您是否尝试过不使用

SORT_NUMERIC
标志?

© www.soinside.com 2019 - 2024. All rights reserved.