如何在php中按字母顺序对不同语言(西班牙语、法语、俄语等)的数组进行排序?

如何在php中按字母顺序对不同语言(西班牙语、法语、俄语等)的数组进行排序?,php,multilingual,alphabetical,alphabetical-sort,Php,Multilingual,Alphabetical,Alphabetical Sort,StackOverflow for PHP中建议的传统字母排序算法可以很好地按照英语字母顺序进行排序,但是对于其他具有不同字母顺序,甚至可能是不同符号的语言,通常的排序算法不起作用。例如: <?php $palabras = ['áncora', 'avión', 'esperanza', 'élite', 'perro', 'niña', 'nina', 'ñaña']; //Traditional sorting method sort($palabras); var_dump($p

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"
}
*/

最简单的方法是使用非常有用的Collator类,该类是为明确的目的而在PHP中开发的。它已经为许多语言和字母预先编制了足够的排序算法

这是一个如何使用它的示例:

<?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"
}
*/