gpt4 book ai didi

php - 在 PHP 中对中文名称进行排序

转载 作者:搜寻专家 更新时间:2023-10-31 22:00:29 25 4
gpt4 key购买 nike

我有一个数组,每个项目包含名字和姓氏:

$input = [
[
'firstName' => 'foo',
'lastName' => 'bar',
]
];

对于大多数用户来说,它们主要是拉丁字母,但有些是用中文书写的。

我如何使用 PHP 对这个名称列表进行排序?

我也对惯例很好奇。我知道在使用 latin-1 字母表的语言中,有时名字排在前面,有时排在最后。我很好奇这种情况在普通话中是否类似,或者是否通常更喜欢一种情况。

最后,我很好奇名称排序和单词排序之间是否存在差异,就像在字典中一样。

最佳答案

非常有趣的问题!每个字符都有一个 Unicode 值。大多数排序都是通过它完成的。由于拉丁字母在 ASCII 范围内,因此这些名称总是最先出现。 PHP 的 asort函数将考虑 Unicode。这是一个需要考虑的输入:

$input = [
[
"firstName" => "一",
"lastName" => "風"
],
[
"firstName" => "이",
"lastName" => "정윤"
],
[
"firstName" => "Mari",
"lastName" => "M"
],
[
"firstName" => "三",
"lastName" => "火"
],
];

让我们总结一下我希望看到的内容,假设我们按名字排序:

  • 拉丁名在前 (Mari M)
  • 接下来是汉字/汉字/韩文名称。我不知道这些名字的值是什么,所以我们必须找出来。

让我们将名字的第一个字符转换为数字。同样,我们使用 Unicode 进行此转换:

  • 一是0x4E00
  • 이是0xC774
  • M 是 0x004D
  • 三是0x4E09

因此,我希望按顺序看到:

  • M

这是我的代码,使用 asort:

$nameByFirst = [];
foreach( $input as $i )
{
$nameByFirst[] = $i["firstName"]." ".$i["lastName"];
}
asort($nameByFirst);

还有我的打印方法:

$i = 1;
foreach( $nameByFirst as $name )
{
echo $i.'. '.$name."<br>";
$i++;
}

我的输出:

  1. 马里·M
  2. 一风
  3. 三火
  4. 이정윤

正如您在上面看到的,我的结果是有序的。首先是拉丁文,然后是汉字/汉字,然后是韩文。 Unicode 是最接近我相信我们可以轻松排序的,所以我喜欢这样。我不是 100% 确定 Unicode 如何为汉字/汉字/韩文赋值,但我愿意相信他们提供的顺序,尤其是因为它非常简单。

关于php - 在 PHP 中对中文名称进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29976806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com