3

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

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

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

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

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

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

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

4

2 回答 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)、尼泊尔语、比利语、孔卡尼语、博杰普里语、马加希语、库鲁克语、尼泊尔语 Bhasa 和信德语。有时用于书写或音译夏尔巴语和克什米尔语。以前用来写古吉拉特语。

于 2012-09-03T21:52:28.973 回答
0

您可以使用排序

sort($keywords, SORT_NATURAL);
于 2012-09-03T21:33:07.340 回答