我有这个数组:
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函数,然后使用排序数字进行排序,然后将相同的路径添加回所有元素。
所以三个步骤是:
-
在数组上使用foreach循环,并在ecah元素上使用str_replace()函数。
-
像使用数字排序一样进行排序。
-
在数组上使用foreach循环,并将常量路径放回前缀。
为了使它更加完美,您可以通过创建自己的函数并将path作为参数来实现。
您是否尝试过不使用SORT_NUMERIC
标志?