2012-09-03 77 views
2

我有一個按字母順序呈現關鍵字(A,B,C,D .... Z,0,1 ... 9)目錄的頁面,其中一些關鍵字是印地語(梵文) 。訂購印地文字符

我的php代碼遍歷字母數組,按第一個字母對關鍵字進行排序,併爲每個字母顯示所有對應關鍵字以相同字母/數字開頭的列。

我的問題是排序印地文字母數組。我的數組是:

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

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

我已經試過了,沒有成功的一些做法和我在「印地文」列下面呈現印地文關鍵字並且無序。

有沒有辦法使用php分類印地文字符?

回答

1

我認爲正常的排序不會因爲某些原因(在印地文字符是一對情侶語言之間共享,對吧?)下面是如何排序基於用戶的工作-defined字符順序

你需要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)); 
     } 
    } 
} 

編輯 - 爲對curious- http://en.wikipedia.org/wiki/Nagari

「[Nagari用於由若干印度語言,包括梵文,印地文,馬拉,帕哈里 (Garhwali和Kumaoni),尼泊爾,Bhili,孔卡尼,博傑普爾,Magahi, Kurukh ,尼泊爾拉薩和信德省。有時用寫或 音譯夏爾巴和克什米爾。 「

+0

首先,謝謝你回答我的問題。爲了測試它,我複製並粘貼到測試頁面,就像那樣,我得到的是:「警告:usort()期望參數2是一個有效的回調函數'hindiCmp'找不到或函數名無效' – McRui

+0

我注意到文本中的一些字母不在你的字符數組中 - 這會導致這個代碼出現問題。至於你得到的警告 - 將'function hindiCmp(){}'代碼放在調用它的兩行上面(如果將hindiCmp() nction在另一個函數裏面而不是在根文件中 - 它可能發生在某些框架上,這取決於包含的東西) – RobertMaysJr

+0

感謝Robert,事實上我試圖把它放在函數的下面,但我混合了代碼爲什麼我也得到了錯誤。該函數沒有錯誤,但返回「1」。我很抱歉,可能不理解如何正確使用它,但是我要找的是第一個字母有效排列的單詞。無論如何,非常感謝你的時間。 – McRui

0

您可以使用sort

sort($keywords, SORT_NATURAL); 
+0

他沒有試圖對他的字符數組進行排序!他試圖使用該數組對字符進行排序,基於該數組中字符的順序... – RobertMaysJr

+0

謝謝。其中一種方法,但沒有成功 – McRui