0

我了解如何使用标准 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')
4

1 回答 1

0

未经测试也不完整的建议:

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

$array[] = $letter

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

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

你会有一个数字,一个数字代表每个字母与“A”的距离。

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

于 2013-04-02T17:57:36.483 回答