[英]PHP sort array with special characters
我知道這被問了很多次,但我仍然找不到防彈解決方案。
這是我的數組,需要按字母順序排序。
setlocale(LC_ALL, 'sl_SI.utf8');
$a = [
'č' => [...],
'a' => [...],
'š' => [...],
'u' => [...]
]
如何按鍵排序?
從這個例子中獲取參考: -在 PHP 中使用特殊字符對數組進行排序
解釋:-
使用array_keys()
方法獲取數組鍵
基於iconv()
和strcmp()
函數的排序鍵
迭代排序的鍵數組並從初始數組中獲取它們對應的值。將此鍵值對保存到結果數組中
像下面這樣:-
<?php
setlocale(LC_ALL, 'sl_SI.utf8');
$a = [
'č' => [12],
'a' => [23],
'š' => [45],
'u' => [56]
];
$index_array = array_keys($a);
function compareASCII($a, $b) {
$at = iconv('UTF-8', 'ASCII//TRANSLIT', $a);
$bt = iconv('UTF-8', 'ASCII//TRANSLIT', $b);
return strcmp($at, $bt);
}
uasort($index_array, 'compareASCII');
$final_array = [];
foreach($index_array as $index_arr){
$final_array[$index_arr] = $a[$index_arr];
}
print_r($final_array);
參考:-
使用strcoll()
。
setlocale(LC_ALL, 'sl_SI.utf8');
// setlocale(LC_ALL,"cs_CZ.UTF-8"); //for Czech characters etc.
uksort($a, 'strcoll');
您可以使用 usort 以這種方式按值對多維數組進行排序:
setlocale(LC_ALL, 'sl_SI.utf8');
// setlocale(LC_ALL,"cs_CZ.UTF-8"); //for Czech characters etc.
usort($posts, function($a, $b) {
return strcoll($a["post_title"], $b["post_title"]);
});
或對於對象:
setlocale(LC_ALL, 'sl_SI.utf8');
// setlocale(LC_ALL,"cs_CZ.UTF-8"); //for Czech characters etc.
usort($posts, function($a, $b) {
return strcoll($a->post_title, $b->post_title);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.