【问题标题】:PHP sort array with special characters带有特殊字符的PHP排序数组
【发布时间】:2019-11-12 22:25:06
【问题描述】:

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

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

setlocale(LC_ALL, 'sl_SI.utf8');

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

如何按键排序?

【问题讨论】:

  • It gives output this,你希望输出什么?
  • 我希望它按键排序 [a => [], č => [], š => [], u => []]

标签: php sorting laravel-5


【解决方案1】:

取自本例:-Sort an array with special characters in PHP

解释:-

  1. 使用array_keys()方法获取数组键

  2. 根据iconv() AND strcmp() 函数对键进行排序

  3. 遍历排序后的键数组并从初始数组中获取对应的值。将此键值对保存到结果数组中

像下面这样:-

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

【讨论】:

  • sort($index_array, SORT_LOCALE_STRING); 怎么样?为什么使用iconv()strcmp() 进行比较更好? :-)
  • 这行得通!现在我也尝试了 ksort($array, SORT_LOCALE_STRING),它也可以,但只适用于 linux 环境。
  • @PhilippMaurer sort($index_array, SORT_LOCALE_STRING);? 无效:-eval.in/990875
  • @Tim 很高兴为您提供帮助:):)
【解决方案2】:

使用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);
 });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 2019-01-21
    • 2012-05-25
    • 2019-12-13
    • 2016-09-10
    • 2015-07-08
    相关资源
    最近更新 更多