带有特殊字符的PHP排序数组

时间:2018-04-19 07:32:49

标签: php sorting laravel-5

我知道这被问了很多次,但我仍然找不到防弹解决方案。

这是我需要按字母顺序排序的数组。

setlocale(LC_ALL, 'sl_SI.utf8');

$a = [
   'č' => [...],  
   'a' => [...],
   'š' => [...], 
   'u' => [...] 
]

如何按键对其进行排序?

2 个答案:

答案 0 :(得分:5)

从这个例子中引用: - Sort an array with special characters in PHP

<强> 说明: -

  1. 使用array_keys()方法

  2. 获取数组键
  3. 根据iconv()strcmp()函数

  4. 对键进行排序
  5. 对已排序的键数组进行迭代,并从初始数组中获取相应的值。将此键值对保存到结果数组

  6. 如下所示: -

    <?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

    <强> 参考: -

    iconv()

    strcmp()

    uasort

答案 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);
 });