2012-08-06 38 views
0

我在我的应用程序中使用Devnagari字体。键盘上的每个英文键代表Devnagari中的某个字符。例如我的名字是Sabin的英文名字,但是当我使用devnagari字体的时候,它会是“滞后”而没有引号。记录以这种方式保存在数据库中。现在我在排序记录时遇到问题。排序使用非英文字体的记录的可能方法?

在devnagari第一次来Devnagari元音,然后devnagari字母表。像 c,cf,O,O {,p,pm,...... [每个用逗号隔开] 然后devnagari字母等于从第一个开始, s,v,u,#,...和等等[每一个都以逗号分隔]。

问题我有在devnagari中按字母顺序排列名称。任何想法将不胜感激。谢谢!

编辑:数组返回如下我需要使用usort函数。

Array 
(
    [0] => stdClass Object 
    (
     [user_id] => NLK32437 
     [first_name] => ;lag 
     [last_name] => %]qL 
     [email_address] => [email protected] 
     [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] => [email protected] 
     [mobile_number] => 984134354 
     [description] => g]kfn 
     [date_joined] => 08-AUG-12 
     [status] => 1 
     [username] => user2 
     [userpassword] => 0e025eade868b4b481f41ff7449bc1967261e170 
    ) 

) 
+0

排序在哪里?在一个PHP数组?你的数据库/ SQL? – madflow 2012-08-06 08:53:09

+0

我唯一能想到的就是实现你自己的比较函数,然后写一个冒泡排序... – Aviral 2012-08-06 08:53:14

+0

你是否设置了正确的[locale](http://www.php.net/manual/en/function.setlocale。 PHP)? PHP支持很多语言。虽然我不知道它是否支持Devnagari(说实话,甚至不知道在哪里说); – dualed 2012-08-06 08:54:31

回答

5

您正在滥用文本编码。您将文本保存为用于其他内容的代码点,并且仅使用将原始英文字母呈现为其他内容的字体。这完全是错误的做法。

有几种编码可以让你保存梵文作为实际的梵文字符。这是supported in Unicode。将文本保存为实际的梵文字符,不要超出现有的英文编码点,并依赖于破碎的字体。然后,您将通过支持Unicode的任何内容获得排序功能和许多其他功能。


一个简单的例子usort尽管如此:

usort($array, function ($a, $b) { 
    static $order = array('M', 'A', ';', 'L', ...); 
    return array_search($a, $order) - array_search($b, $order); 
}); 
+0

好吧,我也想过,我正在重写几十年前用其他编程语言构建的旧应用程序,使用oracle作为数据库。我必须将这些数以百万计的数据迁移到新的应用程序中,并且他们已经这样做了。我必须使数据保持一致。 – WatsMyName 2012-08-06 09:06:19

+0

然后,您的第一步应该是将数据迁移到适当的Unicode代码点。那么你的其他问题将解决自己。 – deceze 2012-08-06 09:07:51

+0

谢谢欺骗!有数百万条记录,我不允许改变或改变他们现有的任何数据。在这个场景中,对我来说最好的选择是什么? – WatsMyName 2012-08-06 09:17:41

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); 
});