在php中为捷克语排序数据数组结构 - 正确的数字排序

时间:2017-04-24 08:27:21

标签: php arrays json sorting

原始问题:url

现在正在为捷克语排序,但数字不是。例如,对于这个数组:

$data = array(
 'items' => array(
    0 => array('city' => 'Praha 10'),
    1 => array('city' => 'Praha 2'),
    2 => array('city' => 'Praha 1'),
    3 => array('city' => 'Cheb'),
    4 => array('city' => 'České budějovice'),
    5 => array('city' => 'Šatov')
  ),
);



$body = wp_remote_retrieve_body( $request );
$data = json_decode( $body, true )['data']['items'];
usort($data,
  function($a,$b) {
    $coll = collator_create( 'cs_CZ' );
    $aSortKey = collator_get_sort_key($coll, $a['city']);
    $bSortKey = collator_get_sort_key($coll, $b['city']);
    return $aSortKey >= $bSortKey;
  ;}
 );

结果将是:Cheb,ČeskéBudějovice,Praha 1,Praha 10,Praha 2,Šatov。

但正确的应该是:Cheb,ČeskéBudějovice,Praha 1,Praha 2,Praha 10,Šatov。

像2这样较小的数字必须在10或更高之前。

2 个答案:

答案 0 :(得分:2)

在PHP中,自然排序可以轻松处理这个问题:

以下是官方链接:php.net natural sort

标准排序:

Array
(
    [3] => img1.png
    [1] => img10.png
    [0] => img12.png
    [2] => img2.png
)

自然顺序排序:

Array
(
    [3] => img1.png
    [2] => img2.png
    [1] => img10.png
    [0] => img12.png
)

答案 1 :(得分:1)

您是否尝试过natsort而非您的用户?