Question vraiment intéressante! Chaque caractère a une valeur Unicode. La plupart du tri est fait à travers cela. Puisque les lettres latines sont dans la gamme ASCII, ces noms apparaissent toujours en premier. La fonction asort
de PHP prendra en compte Unicode. Voici une entrée à considérer:
$input = [
[
"firstName" => "一",
"lastName" => "風"
],
[
"firstName" => "이",
"lastName" => "정윤"
],
[
"firstName" => "Mari",
"lastName" => "M"
],
[
"firstName" => "三",
"lastName" => "火"
],
];
Résumons ce que j'attends de voir, en supposant que nous trier par le premier nom:
- nom latin d'abord (Mari M)
- Hanzi/kanjis/hangeul noms suivants. Je ne sais pas quelles sont les valeurs de ces noms, nous devons donc le découvrir.
Nous allons convertir le premier caractère des premiers noms en quelque chose de numérique.Encore une fois, nous utilisons Unicode pour cette conversion:
- 一 est 0x4E00
- 이 est 0xC774
- M est 0x004D
- 三 est 0x4E09
En tant que tel, je me attends à voir dans l'ordre:
Voici mon code, en utilisant asort
:
$nameByFirst = [];
foreach($input as $i)
{
$nameByFirst[] = $i["firstName"]." ".$i["lastName"];
}
asort($nameByFirst);
Et ma méthode d'impression:
$i = 1;
foreach($nameByFirst as $name)
{
echo $i.'. '.$name."<br>";
$i++;
}
Et ma sortie:
- Mari M
- 一 風
- 三 火
- 이 정윤
Mes résultats, comme vous pouvez le voir ci-dessus, sont en ordre. Le latin d'abord, puis hanzi/kanji, puis hangeul. Unicode est le plus proche que je crois que nous pouvons obtenir un tri facile, alors j'aime aller par là. Je ne suis pas sûr à 100% de la façon dont Unicode attribue des valeurs à hanzi/kanji/hangeul, mais je suis prêt à faire confiance à l'ordre qu'ils ont donné, surtout à cause de la simplicité de son utilisation.
Une notion de base pour tout tri est que vous devez avoir des éléments qui peuvent être comparés. Je ne vois pas cela si les données contiennent des caractères latins et des caractères chinois. – BigScar
Il ne semble pas que le chinois a même un ensemble de règles strictes de l'ordre des caractères: http://www.cantonese.sheik.co.uk/phorum/read.php?1,122672,122681 –
@BigScar one L'option est que si une liste de noms contient des noms latins et chinois mélangés, il suffit de choisir l'un de ces deux noms et de l'afficher en premier. Je suis plus préoccupé par le bon tri des noms chinois entre eux. Curieux s'il y a quelques bonnes pratiques là-bas. – Evert