2013-04-02 108 views
0

我明白如何使用基本的排序與標準的php函數,如natsort(),甚至一些自定義排序使用usort()。我的問題是如何在有多種形式的變量時獲得自然排序結果。高級PHP排序

實施例:

$test = array('3,000 Numeral', '2 A', '2 A+', '2 B', '2 C', '3 A', '3 B', '4 A', '4 A+', '4 B', 'A', 'A+', 'B', 'C'); 

使用usort或natsort我們結束與陣列的第一輸出的數字值和字母數字最後。更糟糕的是,排序功能將逗號分隔的數字值視爲逗號後面的數字不存在。我們結束了:

array('2 A', '2 A+', '2 B', '2 C', '3 A', '3 B', '3,000 Numeral', '4 A', '4 A+', '4 B', 'A', 'A+', 'B', 'C') 

所以我想我的問題是,如何利用先進的分揀處理排序邏輯的多層次與自然的過程結束。喜歡的東西:

array('A', 'A+', 'B', 'C', '2 A', '2 A+', '2 B', '2 C', '3 A', '3 B', '4 A', '4 A+', '4 B', '3,000 Numeral') 
+2

你說的,usort()。如果你可以解釋如何排序,那麼你可以用usort來實現它。 –

回答

0

一個沒有經過測試也沒有完整的建議:

獲取單詞的每個字母,如果是數字把它放在一個array

$array[] = $letter

別的,減A從它並把結果放在array

$array[] = ord($letter) - ord('A')

你會得到一個數字的數字和一個數字,代表每個字母與'A'的距離。

我想你還必須對符號和空格進行其他檢查。