【问题标题】:Order hindi characters订购印地语字符
【发布时间】:2012-08-28 13:28:01
【问题描述】:

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

我的 php 代码遍历字母数组,按第一个字母对关键字进行排序,并为每个字母呈现列,所有相应的关键字都以相同的字母/数字开头。

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

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

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

我尝试了一些方法,但没有成功,我将印地语关键字呈现在“印地语”列下方且无序。

有没有办法使用 php 对印地语字符进行排序?

【问题讨论】:

    标签: php arrays special-characters collation hindi


    【解决方案1】:

    我假设由于某种原因正常排序不起作用(印地语字符在几种语言之间共享,对吗?)以下是如何根据用户定义的字符顺序进行排序

    如果第一个字母匹配,您需要使用 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)、尼泊尔语、Bhili、Konkani、Bhojpuri、Magahi、 库鲁克、尼泊尔巴萨和信德。有时用来写或 音译夏尔巴人和克什米尔人。以前用来写古吉拉特语。”

    【讨论】:

    • 首先,感谢您回答我的问题。为了测试它,我复制并粘贴到一个测试页面中,就像那样,我得到的是:“警告:usort() 期望参数 2 是一个有效的回调,找不到函数‘hindiCmp’或无效的函数名”
    • 我注意到您文本中的一些字母不在您的字符数组中 - 这将导致此代码出现问题。至于您收到的警告-将'function HindiCmp(){}'代码放在调用它的两行上方(如果您将hindiCmp函数放在另一个函数中而不是根文件中,则会发生这种情况-它可能会发生在某些框架上,具体取决于事物的包含方式)
    • 谢谢罗伯特,事实上我试图把它放在合乎逻辑的方式 - 在函数下面,但我混合了代码,这就是为什么我也得到了错误。该函数正常工作,但返回“1”。很抱歉,可能不了解如何正确使用它,但我正在寻找的是没有得到第一个字母有效排序的单词。无论如何,非常感谢您的宝贵时间。
    • 抱歉,我的代码中有一个错字 - $words 将按 usort() 排序并返回 true/false(不是返回的数组) - 在调用 usort() 后检查 $words 的顺序在它上面,它会有所不同
    • 再次感谢您的宝贵帮助。现在它可以正常工作并按照我的预期进行排序。非常感谢。
    【解决方案2】:

    您可以使用sort:

    sort($keywords, SORT_NATURAL);
    

    【讨论】:

    • 他并没有尝试对他的字符数组进行排序!他正在尝试使用该数组根据该数组中字符的顺序对单词进行排序...
    • 谢谢。这是其中一种方法,但没有成功
    猜你喜欢
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2011-03-31
    相关资源
    最近更新 更多