php - 在多维数组中的php中排序时忽略重音字符
问题描述
我有如下所示的多维数组,我想在其中根据[name]
字段进行排序。此外,重音字母应该像没有重音一样排序。
Array
(
[chicago] => Array
(
[community_name] => Chicago, IL
[areas] => Array
(
[0] => Array
(
[name] => Array
(
[0] => HELLO WORLD.
)
)
[1] => Array
(
[name] => Array
(
[0] => Hello
)
)
[2] => Array
(
[name] => Array
(
[0] => Administration.
)
)
)
)
[chicago-and-surrounding-areas] => Array
(
[community_name] => Chicago (and surrounding areas), IL
[areas] => Array
(
[0] => Array
(
[name] => Array
(
[0] => Covit Corp.
)
)
[1] => Array
(
[name] => Array
(
[0] => Câble-Axion Digital Corp.
)
)
)
)
[cambridge-chicago] => Array
(
[community_name] => Cambridge (Chicago), IL
[areas] => Array
(
[0] => Array
(
[name] => Array
(
[0] => Avocados.
)
)
[1] => Array
(
[name] => Array
(
[0] => Aṕple.
)
)
)
)
)
这就是我想要实现的目标:
Array
(
[chicago] => Array
(
[community_name] => Chicago, IL
[areas] => Array
(
[0] => Array
(
[name] => Array
(
[0] => Administration.
)
)
[1] => Array
(
[name] => Array
(
[0] => HELLO WORLD.
)
)
[2] => Array
(
[name] => Array
(
[0] => Hello
)
)
)
)
[chicago-and-surrounding-areas] => Array
(
[community_name] => Chicago (and surrounding areas), IL
[areas] => Array
(
[0] => Array
(
[name] => Array
(
[0] => Câble-Axion Digital Corp.
)
)
[1] => Array
(
[name] => Array
(
[0] => Covit Corp.
)
)
)
)
[cambridge-chicago] => Array
(
[community_name] => Cambridge (Chicago), IL
[areas] => Array
(
[0] => Array
(
[name] => Array
(
[0] => Aṕple.
)
)
[1] => Array
(
[name] => Array
(
[0] => Avocados.
)
)
)
)
)
这是我尝试过的,但我想知道它是否适用于所有情况。在某些情况下,即使在对重音字母进行排序后,其排名也低于非重音字母。
我想知道我应该在下面的代码中进行哪些更改,以便重音字母应该像没有重音一样排序。
foreach ($array as &$locality) {
usort($locality['areas'], function ($a, $b) {
// return $a['name'][0] <=> $b['name'][0];
return iconv('UTF-8', 'ISO-8859-8//TRANSLIT', $a['name'][0]) <=> iconv('UTF-8', 'ISO-8859-8//TRANSLIT', $b['name'][0]);
});
}
解决方案
使用 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”使用一组默认规则,这些规则似乎可以根据需要忽略重音,但您可以为特定语言的排序顺序指定实际的语言环境。
推荐阅读
- flutter - 如何从用户那里获取正确的家庭住址?
- dll - 如何解决错误 0xc0000139
- python-3.x - “gym.envs.box2d”的 COLAB 上的 RL 问题没有属性“LunarLander”
- javascript - VueJS 中的路由验证
- python - 如何在python 3中打印红心
- c - 从“struct node”类型分配给“struct node *”类型时的类型不兼容
- c# - 当我在 c# 的下拉列表中使用数据绑定时,如何解决 System.InvalidOperationException
- ros - 在凉亭中使用 IMU 传感器向上移动对象
- postgresql - 渡槽数据库升级无法连接到数据库
- python - 如何搜索二维数组并返回元素