【问题标题】:Universal Sorting Function for PHP without the Locale Hassle没有语言环境麻烦的 PHP 通用排序功能
【发布时间】:2011-01-04 01:42:22
【问题描述】:

不久前我问过a very similar question,我想知道使用 UTF-8 字符对数组进行正确排序是否会随着 PHP 5.3+ 的新改进而变得容易一些。

我上一个问题中提供的解决方案有效,但我正在寻找一个通用的解决方案;一种不依赖于指定语言环境的方法 - MySQL 使用 UTF-8 排序规则所做的事情

提前致谢!

【问题讨论】:

标签: php sorting utf-8 internationalization localization


【解决方案1】:

简短的回答是:您确实需要了解语言环境。

不要将字符集与区域排序规则混淆。 UTF-8 只是对 Unicode 字符进行编码的一种方式:它并不暗示您如何处理排序、大小写等。

我举一个简单的例子。西班牙语有两种排序规则:传统(“ch”被认为是一个字母)和现代(“ch”是两个字母)。在传统排序规则中,您可以这样排序:

  1. 巴罗
  2. 昆科
  3. 中国
  4. 墙裙

在现代排序规则中,您会这样排序:

  1. 巴罗
  2. 中国
  3. 昆科
  4. 墙裙

这在 UTF-8、Latin1、Latin9、cp850 或其他中是相同的:编码不相关。

【讨论】:

    【解决方案2】:

    PHP 中语言环境的问题在于它们不是线程安全的。如果你运行 Apache 线程,你实际上不能使用 setlocale,因为它会影响所有线程。

    现在,我刚刚找到了一个解决方案:Intl 扩展 中的Collator 类。它具有字符串比较和排序的方法。文档在这里: http://php.net/manual/en/class.collator.php

    【讨论】:

    • 谢谢,我知道 Collator 类,但我仍然需要使用给定的语言环境来构建它。
    • 当然需要locale,php应该怎么知道排序?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多