Заказать символы хинди


У меня есть страница, на которой в алфавитном порядке отображается каталог ключевых слов (A, B, C, D....Z, 0, 1...9), а некоторые ключевые слова написаны на хинди (деванагари).

Мой php-код проходит через массив алфавитов, сортирует ключевые слова по первой букве и отображает столбцы для каждой буквы со всеми соответствующими ключевыми словами, которые начинаются с той же буквы/цифры.

Моя проблема заключается в сортировке массива алфавита хинди. Мой массив:

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

У меня есть, например, следующие ключевые слова, которые я хотите сортировать: एशिया खाना पकाना फोटोग्राफी भारतीय मसाला विध

Я опробовал некоторые подходы, но безуспешно, и я отображаю ключевые слова хинди только в столбце "Хинди" и неупорядоченно.

Есть ли способ сортировать символы хинди с помощью php?

Author: hippietrail, 2012-09-04

2 answers

Я предполагаю, что обычная сортировка по какой-то причине не работает (символы хинди разделяются между несколькими языками, верно?) Вот как выполнить сортировку на основе пользовательского порядка символов

Вам нужно использовать функцию 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

"[Нагари используется] несколькими индийскими языками, включая санскрит, хинди, Маратхи, Пахари (Гархвали и Кумаони), непальский, Бхили, Конкани, Бходжпури, Магахи, Курух, Непальская Бхаса и Синдхи. Иногда используется для написания или транслитерации шерпов и кашмирцев. Раньше использовался для написания гуджарати"

.
 2
Author: msEmmaMays, 2012-09-05 01:31:26

Вы можете использовать сортировку:

sort($keywords, SORT_NATURAL);
 0
Author: Jocelyn, 2012-09-03 22:51:18