gpt4 book ai didi

PHP 数组排序和与波斯字母表的兼容性

转载 作者:可可西里 更新时间:2023-10-31 22:50:06 24 4
gpt4 key购买 nike

我尝试先按值对数组进行排序,然后再按键对数组进行排序,但 php 在处理波斯语字符时效果不佳。
波斯字母表与阿拉伯字母表类似,除了一些额外的字符,如“گ چ پ ژ ک”,PHP 在对波斯字母表中的阿拉伯字母进行排序方面做得很好,但其余部分不按顺序排列。

例如

$str = 'ا ب پ ت ث ج چ ح خ د ذ ر ز ژ ص ض ط ظ ع غ ف ق ک گ ل م ن و ه ی';
$arr = explode(' ', $str);

将创建一个数组 ($arr),其中包含按正确字母顺序排列的所有波斯字母。如果我将它洗牌并使用 asort 函数,如下所示:

shuffle($arr);
asort($arr);
var_dump($arr);

它会像这样结束:

    array
2 => string 'ا'
1 => string 'ب'
22 => string 'ت'
29 => string 'ث'
20 => string 'ج'
12 => string 'ح'
21 => string 'خ'
18 => string 'د'
6 => string 'ذ'
3 => string 'ر'
27 => string 'ز'
17 => string 'ص'
11 => string 'ض'
25 => string 'ط'
5 => string 'ظ'
16 => string 'ع'
8 => string 'غ'
26 => string 'ف'
14 => string 'ق'
9 => string 'ل'
0 => string 'م'
7 => string 'ن'
10 => string 'ه'
28 => string 'و'
24 => string 'پ'
23 => string 'چ'
13 => string 'ژ'
19 => string 'ک'
4 => string 'گ'
15 => string 'ی'

这是错误的!

第 24 项应该在第 1 项之后,第 23 项应该在 20 之后,依此类推。

我如何编写一个函数来执行类似于 PHP 自己的排序函数的操作?或者也许有一种方法可以使 PHP 函数适用于波斯语字符?

最佳答案

很好地获得您可以使用的可用语言环境

print_r(ResourceBundle::getLocales(''));

我有 'fa''fa_IR' 可用,但是 'fa_IR' 仍然返回 false 所以我使用了 'fa' 来测试它:

setlocale(LC_ALL, 'fa');
asort($arr, SORT_LOCALE_STRING);
var_dump($arr);

但这对我来说仍然不是按正确的顺序排序......

所以经过更多的谷歌搜索,最终对我有用的解决方案是使用 Collator 对 Unicode 波斯语字母表进行排序。类:

$col = new \Collator('fa_IR');
$col->asort($arr);
var_dump($arr);

我知道这个问题很老,但这可能仍然有助于新来的人来这里寻找这个问题的答案。

关于PHP 数组排序和与波斯字母表的兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22796522/

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