gpt4 book ai didi

php - ksort 不尊重 LC_COLLATE

转载 作者:搜寻专家 更新时间:2023-10-31 21:08:59 24 4
gpt4 key购买 nike

我有一个数组,其中键是葡萄牙语中的单词,我试图在不考虑重音的情况下对键进行排序。

我有以下代码,但它不起作用。

    $array = array('ábaco' => 1, 
'aéreo' => 2,
'abecedário' => 3,
'andar' => 4,
'absurdo' => 5);

$locale = ( defined('PHP_OS') &&
stristr(PHP_OS, 'win') &&
!stristr(PHP_OS, 'darwin')) ? 'Portuguese_Brazil.1252' : 'pt_BR.UTF-8';

setlocale(LC_COLLATE, $locale);
var_dump($locale);
ksort($array, SORT_LOCALE_STRING);
var_dump($array);

结果如下:

string 'pt_BR.UTF-8' (length=11)
array (size=5)
'abecedário' => int 3
'absurdo' => int 5
'andar' => int 4
'aéreo' => int 2
'ábaco' => int 1

例如,“ábaco”这个词应该是第一个,但它是最后一个,因为它的第一个字母是“á”。

我在装有 PHP 5.4 的 Mac 上运行这个脚本。

这个问题似乎与这个问题中描述的问题不同:PHP ksort seems unaffected by setlocale

最佳答案

尝试了一些选项后,我没能使 ksort 遵守排序规则。

我不再使用 uksort 并制作了我自己的比较函数,如下所示。

function stripAccents($str) {
return strtr(
utf8_decode($str),
utf8_decode('àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ'),
'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}

function compareWords($w1, $w2){
return strcasecmp(stripAccents($w1), stripAccents($w2));
}

uksort($array, "compareWords");

stripAccents 函数是从这个答案借用的:https://stackoverflow.com/a/11743977/726142

关于php - ksort 不尊重 LC_COLLATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25937431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com