我有一个数组,每个项目都包含名字和姓氏:
$input = [
[
'firstName' => 'foo',
'lastName' => 'bar',
]
];
对于大多数用户来说,他们大部分都是拉丁字母,但有些是用中文写的。
如何使用PHP对这个名称列表进行排序?
我也对会议感到好奇。我知道在使用latin-1字母表的语言中,有时名字首先出现,有时候是最后一个。如果这种情况在普通话中是相似的,或者如果一个人通常优先于另一个,我很好奇。
最后我很好奇,如果在名字排序和单词排序之间存在差异,就像在词典中一样。
答案 0 :(得分:0)
非常有趣的问题!每个字符都有一个Unicode值。大多数排序都是通过它完成的。由于拉丁字母在ASCII范围内,因此这些名称总是首先出现。 PHP的asort
函数将考虑Unicode。以下是需要考虑的输入:
$input = [
[
"firstName" => "一",
"lastName" => "風"
],
[
"firstName" => "이",
"lastName" => "정윤"
],
[
"firstName" => "Mari",
"lastName" => "M"
],
[
"firstName" => "三",
"lastName" => "火"
],
];
让我们总结一下我期望看到的内容,假设我们按名字排序:
让我们将名字的第一个字符转换为数字字符。同样,我们使用Unicode进行此转换:
因此,我希望按顺序看到:
以下是我的代码,使用asort
:
$nameByFirst = [];
foreach( $input as $i )
{
$nameByFirst[] = $i["firstName"]." ".$i["lastName"];
}
asort($nameByFirst);
我的打印方法:
$i = 1;
foreach( $nameByFirst as $name )
{
echo $i.'. '.$name."<br>";
$i++;
}
我的输出:
正如您在上面所看到的,我的结果是有序的。首先是拉丁语,然后是hanzi / kanji,然后是hangeul。 Unicode是最接近我认为我们可以轻松排序的,所以我喜欢这样做。我不是100%肯定Unicode如何为hanzi / kanji / hangeul分配值,但我愿意相信他们提供的顺序,特别是因为它有多么简单。