2017-08-30 35 views
3

我想在php中對數組進行排序。但是,結果與我的例外不一樣。爲什麼「104」在「0000105」之前排序?

$k = ["0000000105","104","A","C","B"]; 
sort($k); 
var_dump($k); 

我想獲得0000000105, 104, A,B,C

然而,像分類

104,0000000105, A,B,C

爲什麼104顯示的第一而不是第二個?如何解決它?

在斯威夫特,我寫了像以下,並將其分類像除外結果

var str = ["0000000105","104","A","C","B"] 

let k = str.sorted() 

print(k) //0000000105, 104, A,B,C 
+0

如果你想數字排序,那麼你最好應該只使用了數字。你可以刪除前導零,然後排序,它應該給你你期望的結果。 –

+0

@TimBiegeleisen如果OP刪除了前導零,'105'仍然出現在'104'之後 – Phil

+0

爲什麼**你準確**會在**'104'之前出現** 0000000105? – Phil

回答

3

如果你要的元素嚴格作爲字符串進行排序,你需要告訴PHP這樣做,即

sort($k, SORT_STRING); 

PHP是一種鬆散類型的語言,因此當它遇到0000000105104時,它會在使用SORT_REGULAR時以數字的方式進行比較。

-1

使用natsort($k);

結果將是

array(5) { [0]=> string(10) "0000000105" [1]=> string(3) "104" [2]=> string(1) "A" [4]=> string(1) "B" [3]=> string(1) "C" } 
+0

您使用的是什麼版本的PHP?從5.2.10〜*「零填充數字字符串(例如'00005')現在基本上忽略了0填充。」* – Phil

+1

你測試了你的代碼嗎?它不起作用 – saturngod

+0

當然我試過 – esquarial

相關問題