Php排序数组升序

时间:2014-09-14 18:55:07

标签: php arrays sorting

我有这个数组:

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);

还有其他解决办法没那么复杂吗?

3 个答案:

答案 0 :(得分:3)

使用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);

答案 1 :(得分:0)

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

所以有三个步骤:

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

  2. 按照使用排序数字进行排序。

  3. 在数组上使用foreach循环并将常量路径作为前缀。

  4. 为了使它更完美,你可以通过创建自己的函数并将路径作为参数传递来实现。

答案 2 :(得分:-1)

你试过没有SORT_NUMERIC旗帜吗?