订购印地语字符

3

我有一个页面,按字母顺序呈现关键词目录(A、B、C、D……Z、0、1……9),其中一些关键词是印地语(天城体)。

我的php代码遍历字母数组,按第一个字母对关键词进行排序,并为每个字母/数字渲染列,其中包含所有以相同字母/数字开头的相应关键词。

我的问题是如何对印地语字母表进行排序。我的数组是:

$hindi=array('क','ख','ग','घ','ङ','च','छ','ज','झ','ञ','ट','ठ','ड','ढ','ण','त','थ','द','ध','न','प','फ','ब','भ','म','य','र','ल','व','श','ष','स','ह','ळ','क','ष','ज्','ञ');

例如,我希望对以下关键字进行排序: एशिया खाना पकाना फोटोग्राफी भारतीय मसाला विध。

我已经尝试了一些方法,但没有成功,我正在将印地语关键字渲染到“Hindi”列下面,并且是无序的。

是否有一种方法可以使用php对印地语字符进行排序?

2个回答

2
我假设正常的排序由于某些原因无法工作(印地语字符在几种语言中都是共享的,对吗?)这里是如何根据用户定义的字符顺序进行排序的:
你需要使用usort()并递归调用来比较下一个字母是否匹配,就像这样。
$words = explode(' ', "एशिया खाना पकाना फोटोग्राफी भारतीय मसाला विध");
usort($words, 'hindiCmp');

function hindiCmp($a, $b) {
    $hindi=array('क','ख','ग','घ','ङ','च','छ','ज','झ','ञ','ट','ठ','ड','ढ','ण','त','थ','द','ध','न','प','फ','ब','भ','म','य','र','ल','व','श','ष','स','ह','ळ','क','ष','ज्','ञ');
    $a1 = array_search(substr($a, 0, 1), $hindi); // first letter of a
    $b1 = array_search(substr($b, 0, 1), $hindi); // first letter of b
    if ($a1 < $b1) {
        return 1;
    } elseif ($a1 > $b1) {
        return -1;
    } else {
        if ((strlen($a) <= 1) && (strlen($b) <= 1)) { //end of both strings?
            return 0; // then it's an exact match
        } else { // otherwise compare the next characters
            return hindiCmp(substr($a, 1), substr($b, 1));
        }
    } 
}

编辑-对于好奇的人-http://en.wikipedia.org/wiki/Nagari “[Nagari被用于]几种印度语言,包括梵文,印地语,马拉地语,帕哈里(Garhwali和Kumaoni),尼泊尔语,比利语,孔卡尼语,博杰普尔语,马加希语,库鲁克语,尼泊尔巴萨语和信德语。有时用于书写或音译夏尔巴语和克什米尔语。曾经用于书写古吉拉特语。”

首先,感谢您回答我的问题。为了测试它,我已经将其复制并粘贴到一个测试页面中,就像这样,但我得到的是:“警告:usort()期望参数2是一个有效的回调,函数'hindiCmp'未找到或无效的函数名”。 - McRui
我注意到你的文本中有一些字符不在你的字符数组中,这会导致代码出现问题。至于你收到的警告-将'function hindiCmp() {}'代码放在调用它的两行代码上面(如果你将hindiCmp函数放在另一个函数内而不是根文件中,就会发生这种情况-这可能取决于某些框架的包含方式)。 - msEmmaMays
抱歉,我的代码中有一个打字错误 - $words 将通过 usort() 进行排序并返回 true/false(而不是返回的数组)- 在调用 usort() 后检查 $words 的顺序,它将会不同。 - msEmmaMays
1
非常感谢您的宝贵帮助。现在它可以按照我期望的方式进行排序了。非常感谢。 - McRui
这里是实际脚本内容的链接。http://www.devarticles.in/tools/sorthindi.html请查看下面的“实际排序功能”部分。 - Arvind K.
显示剩余3条评论

0

您可以使用排序

sort($keywords, SORT_NATURAL);

他并不是在尝试对字符数组进行排序!他正在尝试使用该数组根据其中字符的顺序来对单词进行排序... - msEmmaMays
谢谢。这是其中一种方法,但不成功。 - McRui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接