2013-04-02 3 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 мы в конечном итоге с массивом выводя числовые значения первого и алфавитно-цифровой Last. Хуже того, функции сортировки обрабатывают числовые значения, разделенные запятыми, как если бы числа после запятой не существовали. Мы в конечном итоге с:

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» для каждой буквы.

Я полагаю, вам также придется выполнять некоторые другие проверки символов и пробелов.

Смежные вопросы