У меня есть массив , содержащий римские цифры (как строки, конечно). Вот так:
$a = array('XIX', 'LII', 'V', 'MCCXCIV', 'III', 'XIII');
Я хотел бы сортировать их в соответствии с числовыми значениями этих цифр, поэтому результаты должны выглядеть примерно так:
$sorted_a = array('III', 'V', 'XIII', 'XIX', 'LII', 'MCCXCIV');
Итак, мой вопрос:, что лучший способ сортировать массив римских цифр? Я знаю, как использовать функции сортировки массивов PHP, меня интересует логика, которая продолжается внутри функции сравнения.
EDIT. Для простоты я ищу способ, который имеет дело со строками, построенными из базовых цифр стандартным способом (например, CCCC
):
I, V, X, L, C, D, M
РЕЗУЛЬТАТЫ ИСПЫТАНИЙ
Я потратил время на тщательное тестирование всех приведенных примеров кода. Было проведено два теста: один со случайным массивом из 20 римских цифр и второй с массивом, содержащим 4000 таких. Та же машина, много итераций, среднее время, и все это выполняется несколько раз. Конечно, это не что иное, как мои собственные тесты.
ИСПЫТАНИЕ С 20 НОМЕРАМИ:
- hakre, bazmegakapa - около 0,0005 с
- anemgyenge, Andrea, Dirk McQuickly - около 0.0010 сек
- Джо Нельсон - около 0,0050 с
- Роб Хруска - около 0,0100 с
ИСПЫТАНИЕ С 4000 ЧИСЛОВ:
- hakre, bazmegakapa - около 0.13 с
- anemgyenge - около 1,4 с
- Dirk McQuickly, Andrea - около 1,8 с
- Роб Хруска - около 2.8 с
- Джо Нельсон - около 15 с (сюрприз, еще несколько раз проверен)
Мне тяжело награждать щедрость. hakre, и я сделал самые быстрые версии, следуя тому же маршруту, но он сделал мою модификацию, которая ранее была основана на воображаемой идее. Поэтому я принимаю решение hakre, потому что это самый быстрый и приятный, чем мой (IMO). Но я награду за награду, потому что мне нравится его версия, и в нее, похоже, вложено много усилий.