簡體   English   中英

如何使用帶有重音字符的 PHP array_multisort

[英]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`

更多安裝信息在這里

用法

使用方法非常簡單

  1. 第 1 步:您初始化音譯器 object
$transliterator = Transliterator::createFromRules(':: NFD; :: [:Nonspacing Mark:] Remove; :: NFC;', Transliterator::FORWARD);

有關可應用於此 function 的規則列表,請參閱 本手冊 示例中使用的那些已經適用於您的特定用例。

  1. 第 2 步:您使用它來音譯您的文本
$newstring = $transliterator->transliterate($string);

在您的特定情況下,您當然需要應用於數組的所有相關元素。

你沒有共享數組結構,所以我無法給出一個清晰的例子,但是根據結構,你可以使用foreacharray_walk或遞歸函數在需要的地方循環和更改。 如果你想用數組中的樣本更新你的初始問題,我們可以更精確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM