2 回答

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
使用 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”使用一組默認(rèn)規(guī)則,這些規(guī)則似乎會(huì)根據(jù)需要忽略重音,但您可以為特定于語(yǔ)言的排序順序指定實(shí)際區(qū)域設(shè)置。

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以使用Normalizer將字符與變音符號(hào)分開(kāi),然后將其刪除以獲得“基本”字符。
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 關(guān)注
- 146 瀏覽
添加回答
舉報(bào)