高级PHP排序

时间:2013-04-02 17:29:07

标签: php sorting

我理解如何使用标准php函数(如natsort())进行基本排序,甚至使用usort()进行自定义排序。我的问题是当存在多种形式的变量时如何获得自然排序结果。

示例:

$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')

1 个答案:

答案 0 :(得分:0)

未经测试或完整的建议:

获取单词的每个字母,如果是数字,请将其放在array

$array[] = $letter

否则,从中减去A并将结果放入array

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

你会得到一个数字的数字,以及一个代表每个字母与'A'的距离的数字。

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