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

问题描述

在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中开发的非常有用的Collat​​or类用于此明确目的。它已经为多种语言和字母预先编程了足够的排序算法。

这是如何使用它的示例:

<?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

排序功能:https://www.php.net/manual/en/collator.sort.php

排序功能:https://www.php.net/manual/en/collator.asort.php