我有这个数组:
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);
还有其他解决办法没那么复杂吗?
答案 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进行排序,然后将相同的路径添加回所有元素。
所以有三个步骤:
在数组上使用foreach循环,并在ecah元素上使用str_replace()函数。
按照使用排序数字进行排序。
在数组上使用foreach循环并将常量路径作为前缀。
为了使它更完美,你可以通过创建自己的函数并将路径作为参数传递来实现。
答案 2 :(得分:-1)
你试过没有SORT_NUMERIC
旗帜吗?