我有一个包含罗马数字的数组(当然是字符串)。像这样:
$a = array('XIX', 'LII', 'V', 'MCCXCIV', 'III', 'XIII');
我想根据这些数字的数值对它们进行排序,所以结果应该是这样的:
$sorted_a = array('III', 'V', 'XIII', 'XIX', 'LII', 'MCCXCIV');
所以我的问题是:对罗马数字数组进行排序的最佳方法是什么?我知道如何使用 PHP 的数组排序函数,我对比较函数内部的逻辑很感兴趣。
编辑:为简单起见,我只是在寻找一种以标准方式处理由基本数字构成的字符串的方法(CCCC
例如没有):
I, V, X, L, C, D, M
试验结果
我花时间广泛测试了所有发布的代码示例。进行了两次测试,一次随机排列 20 个罗马数字,第二次测试包含 4000 个罗马数字。同一台机器,大量的迭代,平均花费的时间,所有这些都运行了好几次。当然这不是官方的,只是我自己的测试。
用 20 个数字测试:
- hakre , bazmegakapa - 大约 0.0005 秒
- anemgyenge , Andrea , Dirk McQuickly - 大约 0.0010 s
- Joe Nelson - 大约 0.0050 秒
- Rob Hruska - 大约 0.0100 秒
用 4000 个数字测试:
- hakre , bazmegakapa - 大约 0.13 秒
- anemgyenge - 大约 1.4 秒
- Dirk McQuickly , Andrea - 大约 1.8 秒
- Rob Hruska - 大约 2.8 秒
- Joe Nelson - 大约 15 秒(惊喜,又检查了几次)
我很难授予赏金。hakre 和我按照相同的路线制作了最快的版本,但他制作了我的变体,这是以前基于 borrible 的想法。所以我会接受 hakre 的解决方案,因为这比我的(IMO)最快和更好。但我会将赏金奖励给 anemgyenge,因为我喜欢他的版本,而且似乎付出了很多努力。