2015-10-16 113 views
1

我无法对我的数组进行排序,因此数字在-(连字符)之前出现。在字符串之前对数组数值进行排序?

我今天数组:

Array 
(
    [-] => Test 
    [0] => Test 
    [1] => Test 
    [2] => Test 
) 

我想要的顺序:

Array 
(

    [0] => Test 
    [1] => Test 
    [2] => Test 
    [-] => Test 
) 

我已搜查这里和谷歌。但没有找到答案。我尝试过使用ksort()usort()进行实验,但没有成功。

回答

4

你可以创建你自己的比较函数uksort它handels这种特殊情况。

uksort($a, function($a, $b) { 
    if (is_numeric($a) && is_numeric($b)) return $a - $b; 
    else if (is_numeric($a)) return -1; 
    else if (is_numeric($b)) return 1; 
    return strcmp($a, $b); 
}); 
+0

这个伎俩!谢谢! –

3

使用natural order sorting function

natsort()

例如:

$arr = ['_', 6, 3, 5]; 
natsort($arr); 
print_r($arr); 

输出:

Array 
(
    [2] => 3 
    [3] => 5 
    [1] => 6 
    [0] => _ 
) 

如果你想通过键)的功能与标志​​排序,那么你可以使用kso​​rt(SORT_NATURALksort($arr, SORT_NATURAL);

例如:

$arr = [ 
    '_' => 'test', 
    6 => 'test', 
    3 => 'test', 
    5 => 'test' 
]; 

ksort($arr, SORT_NATURAL); 
+0

所以他可以使用标志SORT_NATURAL的ksort – Robert

0

功能检查($ X,$ Y){
if(is_numeric($ x)& &!is_numeric($ y))
return 1;
否则如果(!is_numeric($ x)& & is_numeric($ y))
return -1;
else
return($ x < $ y)? -1:1;
}
$ array = array(“ - ”,“1”,“2”,“3”);
usort($ array,'check');

相关问题