订购印地文字符

时间:2012-09-03 21:19:55

标签: php arrays special-characters collation hindi

我有一个页面按字母顺序呈现关键字目录(A,B,C,D ...... Z,0,1 ... 9),部分关键字是印地语(梵文)。

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

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

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

例如,我有以下关键字我想分类:एशियाखानापकानाफोटोग्राफीभारतीयमसालाविध

我尝试了一些没有成功的方法,我将hindi关键字渲染到“印地语”列并且无序。

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

2 个答案:

答案 0 :(得分: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),尼泊尔语,Bhili,Konkani,Bhojpuri,Magahi,   Kurukh,尼泊尔Bhasa和Sindhi。有时习惯写或   音译夏尔巴人和克什米尔人。以前习惯写古吉拉特语。“

答案 1 :(得分:0)

您可以使用sort

sort($keywords, SORT_NATURAL);