如何对 UTF-8 字符串数组进行排序?

2023-11-22

我目前不知道如何在 PHP 中对包含 UTF-8 编码字符串的数组进行排序。该数组来自 LDAP 服务器,因此通过数据库排序(没问题)不是解决方案。 以下内容在我的 Windows 开发机器上不起作用(尽管我认为这至少应该是一个可能的解决方案):

$array=array('Birnen', 'Äpfel', 'Ungetüme', 'Apfel', 'Ungetiere', 'Österreich');
$oldLocal=setlocale(LC_COLLATE, "0");
var_dump(setlocale(LC_COLLATE, 'German_Germany.65001'));
usort($array, 'strcoll');
var_dump(setlocale(LC_COLLATE, $oldLocal));
var_dump($array);

输出是:

string(20) "German_Germany.65001"
string(1) "C"
array(6) {
  [0]=>
  string(6) "Birnen"
  [1]=>
  string(9) "Ungetiere"
  [2]=>
  string(6) "Äpfel"
  [3]=>
  string(5) "Apfel"
  [4]=>
  string(9) "Ungetüme"
  [5]=>
  string(11) "Österreich"
}

这完全是无稽之谈。使用 1252 作为代码页setlocale()给出了另一个输出,但仍然是一个明显错误的输出:

string(19) "German_Germany.1252"
string(1) "C"
array(6) {
  [0]=>
  string(11) "Österreich"
  [1]=>
  string(6) "Äpfel"
  [2]=>
  string(5) "Apfel"
  [3]=>
  string(6) "Birnen"
  [4]=>
  string(9) "Ungetüme"
  [5]=>
  string(9) "Ungetiere"
}

有没有办法对具有 UTF-8 字符串区域设置感知的数组进行排序?

刚刚注意到这似乎是 Windows 上的 PHP 问题,与以下代码片段相同de_DE.utf8用作 Linux 机器上的语言环境。不过,针对这个特定于 Windows 的问题的解决方案会很好......


$a = array( 'Кръстев', 'Делян1', 'делян1', 'Делян2', 'делян3', 'кръстев' );
$col = new \Collator('bg_BG');
$col->asort( $a );
var_dump( $a );

Prints:

array
  2 => string 'делян1' (length=11)
  1 => string 'Делян1' (length=11)
  3 => string 'Делян2' (length=11)
  4 => string 'делян3' (length=11)
  5 => string 'кръстев' (length=14)
  0 => string 'Кръстев' (length=14)

The Collator类定义于PECL国际延伸。它随 PHP 5.3 源代码一起分发,但在某些构建中可能会被禁用。例如。在 Debian 中,它位于 php5-intl 包中。

Collator::compare对以下有用usort.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对 UTF-8 字符串数组进行排序? 的相关文章

随机推荐

  • C++11 类 的分布如何转换底层生成器?

    下面的代码看起来并不直观 include
  • java.lang.IllegalArgumentException:spring + hibernate中需要'sessionFactory'或'hibernateTemplate'

    我正在做 spring hibernate 应用程序 当我在 tomcat 服务器上运行应用程序时 出现一些异常 下面是我的代码 这是我的 bean 配置文件
  • 如何在Delphi FireMonkey中调整按钮大小以适合文本?

    我希望按钮尺寸 宽度和高度 尽可能小 但我希望它适合文本 有代码示例吗 Delphi XE4 FireMonkey 移动应用程序 FireMonkey 通过使用的方法呈现文本文本布局 class 我们可以通过类助手访问此方法 然后根据布局提
  • 使用 PHP 发送 Firebase 通知

    每个人 我在使用 PHP 发送 FIRebase 通知时遇到问题 当我从 Firebase 控制台发送它时 我收到通知 但是当我从 PHP 发送它时 我没有收到任何通知 你知道问题出在哪里吗 这是我的 PHP 代码
  • 谷歌选择器和后端文件下载

    我在我的网络应用程序中使用谷歌选择器来允许用户从他的谷歌驱动器中浏览和选择文件 一旦他做出选择 选择器就会返回有关所选文件的各种数据 包括文件 ID 和 URL 我的目标是将选定的文件下载到服务器 如果我将 URL 传递给后端脚本 它将无法
  • mongodb 在更新中设置 null

    我必须交换文档的值 var query id ObjectId 53e1c254382f891cc600076d db properties find query forEach function prop printjson id pro
  • 使用 cte 创建 while 循环

    如何从 while 循环创建 sql server cte我的循环是这样的 declare ind as int declare code as nvarchar set ind 0 while ind lt 884 begin selec
  • 无法使用 ftplib 列出 FTP 目录 – 但 FTP 客户端可以工作

    我正在尝试连接到 FTP 但无法运行任何命令 ftp server ip ftp username username ftp password password ftp ftplib FTP ftp server ftp login ftp
  • 从批处理文件中重定向输出

    我正在使用一些简单的命令创建一个批处理文件来从系统收集信息 批处理文件包含获取时间 IP 信息 用户等的命令 我将所有命令组装在一个批处理文件中 然后运行 但我希望批处理文件在运行时将结果输出到文本文件 日志 是否有一个命令可以添加到批处理
  • Selenium:尝试获取 Firefox 控制台日志会导致“WebDriverError:不允许 HTTP 方法”

    我试图在我的 selenium 测试中捕获控制台错误 具有 selenium webdriver 4 0 0 alpha 5 和最新的 geckodriver 和 chromedriver 的节点环境 我已经为 Firefox 设置了一个驱
  • 查找每行特定值最近出现的时间

    假设我有一个数据表 dt lt data table datetime seq as POSIXct 2016 01 01 00 00 00 as POSIXct 2016 01 01 10 00 00 by 1 hour ObType c
  • Codeigniter CSRF 令牌问题

    我制作了一个简单的注册 新闻通讯网站 但我遇到了一个奇怪的问题 有些人会收到这样的错误 操作遇到错误 您所提出的要求是不允许的 我已经尝试过google 发现当CSRF设置为true时人们也遇到同样的问题 然而 并不是每个人都会发生这种情况
  • 表格列的对齐方式

    我正在尝试将表放在表内 这意味着嵌套表 现在它看起来像这样截屏 但我需要从左对齐 因为我在每行中使用相同的计数列 您可以看到我为获得此输出所做的尝试 提前致谢 report table border collapse collapse wi
  • reinterpret_cast 到函数指针

    这是我为实验编写的代码reinterpret cast
  • 如何在横向模式和纵向模式之间使用 2 种不同的背景

    我有一个 Android 应用程序 我想知道是否可以为横向和纵向模式提供 1 个布局 1 个布局 xml 文件 但我想要每种模式都有不同的背景 那可能吗 我需要 2 个 xml 文件指向不同的背景图像吗 或者我可以使用 1 个 xml 文件
  • iPad Safari IOS 5 window.close() 关闭错误的窗口

    我们有一个 iPad 应用程序可以在我们的旧款 iPad 上运行 我们使用以下方式打开外部链接 var x window open url 一天结束时 当用户关闭应用程序的这一部分时 我们会检查它打开的所有窗口 并对每个窗口执行 x clo
  • 计算 Postgres 中最近的工作日

    我需要根据订单请求的交货日期在 postgres 查询中安排一些项目 例如 订单要求在星期一交货 例如 20120319 并且订单需要在前一个工作日 20120316 准备 想到最直接的方法 我愿意添加日期表 我认为必须有一种比使用一长串
  • R 中的 ImageMagick

    我想在 R 中使用 ImageMagick 但 R 不允许我安装它 install packages ImageMagick Installing package into C Users FSFH 2 Documents R win li
  • Raku 在编译时执行哪些类型检查?未来这种情况会改变吗?

    目前 截至 2020 年 8 月 Rakudo 不会在编译时对函数的返回值进行类型检查 也就是说 它不提供函数满足其返回约束的静态保证 具体来说 以下两个函数都编译为 Raku sub get int gt Int bug sub get
  • 如何对 UTF-8 字符串数组进行排序?

    我目前不知道如何在 PHP 中对包含 UTF 8 编码字符串的数组进行排序 该数组来自 LDAP 服务器 因此通过数据库排序 没问题 不是解决方案 以下内容在我的 Windows 开发机器上不起作用 尽管我认为这至少应该是一个可能的解决方案