2013-04-02 61 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'的距离。

我想你还必须对符号和空格进行其他检查。