0

アプリケーションでデーバナーガリーフォントを使用しています。キーボードの各英語キーは、デーバナーガリーの特定の文字を表します。たとえば、私の名前は英語のSabinですが、デーバナーガリーフォントを使用すると、引用符なしで「;lag」になります。そして、レコードはこの方法でデータベースに保存されます。現在、レコードの並べ替えに問題があります。

デーバナーガリーには、最初にデーバナーガリーの母音があり、次にデーバナーガリーのアルファベットがあります。c、cf、O、O {、p、pm、...... [それぞれをコンマで区切って]次に、最初から始まるデーバナーガリーアルファベット、s、v、u、#、...など[それぞれがコンマで区切られています]。

私が抱えている問題は、デーバナーガリーで名前をアルファベット順に並べ替えることです。どんなアイデアでも大歓迎です。ありがとう!

編集:配列は次のように返され、usort関数を使用する必要があります。

Array
(
    [0] => stdClass Object
    (
        [user_id] => NLK32437
        [first_name] => ;lag
        [last_name] => %]qL
        [email_address] => test1@msn.com
        [mobile_number] => 9834874582
        [description] => g]kfn
        [date_joined] => 08-AUG-12
        [status] => 1
        [username] => user1
        [userpassword] => 691f9298642af07c2d6ea8fef56074201e077b34
    )

[1] => stdClass Object
    (
        [user_id] => NLK32435
        [first_name] => clgn
        [last_name] => zdf{
        [email_address] => test2@msn.com
        [mobile_number] => 984134354
        [description] => g]kfn
        [date_joined] => 08-AUG-12
        [status] => 1
        [username] => user2
        [userpassword] => 0e025eade868b4b481f41ff7449bc1967261e170
    )

)
4

2 に答える 2

5

テキストエンコーディングを悪用しています。テキストを他の目的のコードポイントとして保存し、元の英語の文字を他の何かとしてレンダリングするフォントのみを使用しています。これは完全に間違った方法です。

デーバナーガリーを実際のデーバナーガリー文字として保存できるエンコーディングがいくつかあります。Unicodeでサポートされています。テキストを本来のデーバナーガリー文字として保存し、既存の英語のコードポイントをオーバーロードせず、壊れたフォントに依存します。次に、Unicodeをサポートするものによってソート機能や他の多くのものを取得します。


usortそれにもかかわらず、簡単な例:

usort($array, function ($a, $b) {
    static $order = array('M', 'A', ';', 'L', ...);
    return array_search($a, $order) - array_search($b, $order);
});
于 2012-08-06T09:03:16.860 に答える
0

試してみたところ、うまくいきました。@decezeと@dualedに感謝します。これが私がしたことです

usort($array, function ($a, $b) {
    static $order = array('c', ';', 'g', 'L');
    return array_search($a->first_name, $order) - array_search($b->first_name, $order);
});
于 2012-08-09T03:44:35.293 に答える