Php按升序排列数组


Php sort array ascending order

我有这个数组:

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

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

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

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

所以三个步骤是:

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

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

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

为了使它更加完美,您可以通过创建自己的函数并将path作为参数来实现。

您是否尝试过不使用SORT_NUMERIC标志?