2015-10-16 104 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');

相關問題