[英]How to use PHP array_multisort with accented characters
我目前有一個多維數組,我正在使用 array_multisort 進行排序,但是其中一列有一些特殊的重音字符 - 例如Développé
。
有沒有辦法用它們等效的非重音字母é
= e
對這些字符進行排序?
array_multisort($column1, SORT_ASC,SORT_STRING|SORT_FLAG_CASE, $column2, SORT_ASC,SORT_STRING|SORT_FLAG_CASE, $multid_array);
關於這個問題,這里有一些關於 SO 的答案,但是當我過去嘗試它們時,似乎它們中的大多數過於依賴系統的區域設置,甚至str_replace 不完整 arrays 。 因此,運行代碼會在不同的環境中產生不同的結果,或者會遺漏幾個字符。
最后我發現最好的方法來自這個未被接受的答案。 根據我的測試,這種方法非常有效,獨立於所有本地設置,並且可以僅適用於重音è
或不同的設置,如æ
基礎是Transliterator class ,是國際擴展的一部分。 從 PHP 5.4 開始可用。 在大多數系統中,它要么已經捆綁在一起,要么可以與
pecl install intl`
更多安裝信息在這里。
使用方法非常簡單
$transliterator = Transliterator::createFromRules(':: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;', Transliterator::FORWARD);
有關可應用於此 function 的規則列表,請參閱 本手冊。 示例中使用的那些已經適用於您的特定用例。
$newstring = $transliterator->transliterate($string);
在您的特定情況下,您當然需要應用於數組的所有相關元素。
你沒有共享數組結構,所以我無法給出一個清晰的例子,但是根據結構,你可以使用foreach
或array_walk或遞歸函數在需要的地方循環和更改。 如果你想用數組中的樣本更新你的初始問題,我們可以更精確。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.