【问题标题】:How to sort an array alphabetically in different languages (Spanish, French, Russian, etc.) in php?如何在 php 中按不同语言(西班牙语、法语、俄语等)的字母顺序对数组进行排序?
【发布时间】:2021-02-18 03:01:37
【问题描述】:

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 multilingual alphabetical alphabetical-sort


    【解决方案1】:

    最简单的方法是使用非常有用的 Collat​​or 类,该类是用 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"
    }
    */
    

    您可以在此处查看文档:

    班级: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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多