问题描述
在StackOverflow for PHP中建议的传统字母排序算法可以很好地按英语字母顺序进行排序,但是对于其他具有不同字母顺序甚至符号的语言,常规的排序算法无法正常工作。例如:
<?PHP
$palabras = ['áncora','avión','esperanza','élite','perro','niña','nina','ñaña'];
//Traditional sorting method
sort($palabras);
var_dump($palabras);
/*
returns an inadequate order:
array(8) {
[0]=>
string(6) "avión"
[1]=>
string(9) "esperanza"
[2]=>
string(4) "nina"
[3]=>
string(5) "niña"
[4]=>
string(5) "perro"
[5]=>
string(7) "áncora"
[6]=>
string(6) "élite"
[7]=>
string(6) "ñaña"
}
*/
如何以简单的方式对这些数组进行排序?
解决方法
最简单的方法是使用在PHP中开发的非常有用的Collator类用于此明确目的。它已经为多种语言和字母预先编程了足够的排序算法。
这是如何使用它的示例:
<?php
$palabras = ['áncora','avión','esperanza','élite','perro','niña','nina','ñaña'];
//Make a Collator object with the locale code of the language to sort.
$collator = new Collator('es_ES');
//Use Collator::sort() instead of sort() [returns a numerical array];
//or Collator::asort() instead of asort [maintains the keys of an associative array].
$collator->sort($palabras,Collator::SORT_REGULAR);
var_dump($palabras);
/*
returns:
array(8) {
[4]=>
string(7) "áncora"
[3]=>
string(6) "avión"
[0]=>
string(6) "élite"
[7]=>
string(9) "esperanza"
[2]=>
string(4) "nina"
[1]=>
string(5) "niña"
[6]=>
string(6) "ñaña"
[5]=>
string(5) "perro"
}
*/
您可以在此处查看文档:
课程:https://www.php.net/manual/en/class.collator.php