2015-10-01 173 views
2

我有一個陣列排序陣列通過鍵

$a = array( 0=>'test', 1=>'test some', 10=>'test10', 
       2=>'test2', '11'=>'test value',22=>'test abc' 
     ); 

我需要像

0 => test 
1 => test some 
10 => test 10 
11 => test value 
2 => test2 
22 => test abc 

排序呢我怎麼能做到這一點?

我試圖ksort但它沒有按我的要求

ksort結果工作

Array 
(
    [0] => test 
    [1] => test1 
    [2] => test2 
    [10] => test10 
    [11] => test11 
    [22] => test22 
) 
+0

使用[ksort(http://php.net/manual/en/function.ksort.php) – Chayan

+0

[符號的可能重複:所有的基本途徑在PHP中對數組和數據進行排序](http://stackoverflow.com/questions/17364127/reference-all-basic-ways-to-sort-arrays-and-data-in-php) – Epodax

+1

如果所有的鍵都是字符串關鍵'11'ksort(帶有SORT_STRING標誌)將按照您的要求工作。 –

回答

3

這應該工作:

$a = array(0=>'test', 1=>'test1', 10=>'test10', 2=>'test2', '11'=>'test11', 22=>'test22'); 
ksort($a, SORT_STRING); 
print_r($a) 

輸出:

Array 
(
    [0] => test 
    [1] => test1 
    [10] => test10 
    [11] => test11 
    [2] => test2 
    [22] => test22 
) 
+0

謝謝,它適合我 – Avinash

1

你可以實現是通過使用uksort來獲得所需的結果。uksort()函數使用用戶定義的比較函數通過鍵對數組進行排序。

$a= array( 0=>'test', 1=>'test1', 10=>'test10', 
       2=>'test2', '11'=>'test11',22=>'test22' 
     ); 
function my_sort($a,$b) 
{ 
if ($a==0) return 0; 
return (substr($a, 0, 1)<substr($b, 0, 1))?-1:1; 
} 

uksort($a,"my_sort"); 
print_r($a); 

輸出

Array ([0] => test 
[1] => test1 
[10] => test10 
[11] => test11 
[2] => test2 
[22] => test22)