2 回答
TA贡献1846条经验 获得超7个赞
使用 intl 的 Collator:
$arr = [
['key' => 'Avocado'],
['key' => 'Aṕple'],
];
$c = new Collator('root');
usort(
$arr,
function($a, $b) use($c){
return $c->compare($a['key'], $b['key']);
}
);
var_dump($arr);
输出:
array(2) {
[0]=>
array(1) {
["key"]=>
string(7) "Aṕple"
}
[1]=>
array(1) {
["key"]=>
string(7) "Avocado"
}
}
其中“root”使用一组默认规则,这些规则似乎会根据需要忽略重音,但您可以为特定于语言的排序顺序指定实际区域设置。
TA贡献1757条经验 获得超7个赞
您可以使用Normalizer将字符与变音符号分开,然后将其删除以获得“基本”字符。
function stripDiacritics(string $string): string {
return preg_replace(
'/[\x{0300}-\x{036f}]/u',
'',
Normalizer::normalize($string , Normalizer::FORM_D)
);
}
foreach ($array as &$locality) {
usort($locality['areas'], function ($a, $b) {
return stripDiacritics($a['name'][0]) <=> stripDiacritics($b['name'][0]);
});
}
- 2 回答
- 0 关注
- 100 浏览
添加回答
举报