我知道这被问了很多次,但我仍然找不到防弹解决方案。
这是我需要按字母顺序排序的数组。
setlocale(LC_ALL, 'sl_SI.utf8');
$a = [
'č' => [...],
'a' => [...],
'š' => [...],
'u' => [...]
]
如何按键对其进行排序?
答案 0 :(得分:5)
从这个例子中引用: - Sort an array with special characters in 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);
输出: - https://eval.in/990872
<强> 参考: - 强>
答案 1 :(得分:0)
使用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);
});