2016-03-02 137 views
1

我有一個值得列出值的函數。用特殊字符排序

function build_sorter($key) { 
    return function ($a, $b) use ($key) { 
     return strnatcmp($a[$key], $b[$key]); 
    }; 
} 

它工作的很好,但它沒有對特殊字符與變音符(ÁÉÍÓŮňďť等)進行排序。儘管它們屬於較高的類別(正確的排序方式類似於AÉEENNEN等,但排序使它成爲AEnÁÉň),但它們在列表的最後列出。

有沒有人知道如何實現這一目標?

回答

1

我不知道這是否適用於您,但我通常會將字符串轉換爲ASCII,因此會將您的字符排序爲「常規」人聲。

function build_sorter($key) { 
    return function ($a, $b) use ($key) { 
     $stra = iconv('utf8', 'US-ASCII//TRANSLIT', $a[$key]); 
     $strb = iconv('utf8', 'US-ASCII//TRANSLIT', $b[$key]); 
     return strnatcmp($stra, $strb); 
    }; 
} 

由於我們對音譯ASCII,你得到相當於「A」爲「A」,因此您的分揀機現在應該正常工作。

  • 記得將utf-8設置爲您選擇的編碼。我只是假定它是UTF。
  • 您的原始字符串不受影響。
  • 排序可能會返回不一致的結果中包含「修改」和「改變」

串[這些問題講英語的人永遠不會有]

+0

大,是工作,非常感謝你!相信我,我羨慕你,你不必處理這樣的事情...... :) – Pupik

+1

哈哈哈。作爲一個半德國人,一半西班牙人誰經營一個網站,在俄羅斯人之間有點受歡迎,我得處理它。感受你的痛苦。 –