UCA +自然排序
我最近了解到PHP已经通过intl扩展支持Unicode Collation算法:
$array = array
(
'al', 'be',
'Alpha', 'Beta',
'Álpha', 'Àlpha', 'Älpha',
'かたかな',
'img10.png', 'img12.png',
'img1.png', 'img2.png',
);
if (extension_loaded('intl') === true)
{
collator_asort(collator_create('root'), $array);
}
Array
(
[0] => al
[2] => Alpha
[4] => Álpha
[5] => Àlpha
[6] => Älpha
[1] => be
[3] => Beta
[11] => img1.png
[9] => img10.png
[8] => img12.png
[10] => img2.png
[7] => かたかな
)
正如您所看到的,即使使用混合大小写字符串,这似乎也能完美运行!到目前为止我遇到的唯一缺点是没有对自然排序的支持,我想知道解决这个问题的最佳方法是什么,这样我就可以合并两个世界中最好的一个。
我试图指定Collator::SORT_NUMERIC
排序标志,但结果更加混乱:
collator_asort(collator_create('root'), $array, Collator::SORT_NUMERIC);
Array
(
[8] => img12.png
[7] => かたかな
[9] => img10.png
[10] => img2.png
[11] => img1.png
[6] => Älpha
[5] => Àlpha
[1] => be
[2] => Alpha
[3] => Beta
[4] => Álpha
[0] => al
)
但是,如果我只使用img*.png
值运行相同的测试,我会得到理想的输出:
Array
(
[3] => img1.png
[2] => img2.png
[1] => img10.png
[0] => img12.png
)
任何人都可以想到一种在添加自然排序功能的同时保留Unicode排序的方法吗?
没有找到相关结果
已邀请:
3 个回复
济畦刨
输出:
部窖空
将使用Unicode :: Collate模块的
钩子将数字运行转换为零填充数字,从而产生所需的输出:
查看您引用的PHP文档,看起来PHP库不支持Perl Unicode :: Collate模块支持的完整UCA定制可能性。事实上,它看起来更像是Perl的Unicode :: Collate :: Locale模块,除了PHP库代码似乎不支持Perl代码所做的继承的排序规则选项。 我想如果所有其他方法都失败了,你可以调用Perl代码来完成所需的工作。
蹄渭信妥扳
输出:
仍然希望有更好的解决方案。