【问题标题】:Sort data array structure in php for Czech language在php中对捷克语的数据数组结构进行排序
【发布时间】:2017-04-23 13:35:20
【问题描述】:

我从远程 API 获取 php 中的 JSON,然后使用 usort 我将数据数组从 a 排序到 z。但我需要用捷克语字母对其进行排序。

这是我当前的代码:

     $body = wp_remote_retrieve_body( $request );
     $data = json_decode( $body, true )['data']['items'];
     usort($data,function($a,$b) {return strnatcasecmp($a['city'],$b['city']);});

你能帮帮我吗?

谢谢

【问题讨论】:

  • 本文informit.com/articles/article.aspx?p=1969707&seqNum=13 使用新的字母表进行排序。您可能只需要更改字符中的一些字母即可使其启动并运行。如果您使用的是 >= 5.3 的 php 版本,则可以只使用 Collat​​or 类,并使用文章底部解释的排序功能。
  • 是的,有 PHP 5.4。我试过了,但没有用......怎么了? $data = json_decode( $body, true )['data']['items']; $collator = new Collator('cs_CZ'); $collator->sort($data['city']);
  • 您必须提供一个包含所有项目的数组,而不仅仅是我假设的城市。你能用 $data 数组结构更新你的问题吗?
  • 问题已更新,谢谢。

标签: php arrays json sorting


【解决方案1】:

由于您没有提供数组结构,我只是假设一个。

$data = array(
    'items' => array(
        0 => array('city' => 'Froni'),
        1 => array('city' => 'Frans'),
        2 => array('city' => 'Frédéric')
    ),
);
 usort($data['items'],
     function($a,$b) {
         $coll = collator_create( 'fr_FR' );
         $aSortKey = collator_get_sort_key($coll, $a['city']);
         $bSortKey = collator_get_sort_key($coll, $b['city']);
         return $aSortKey >= $bSortKey;
     }
 );
var_dump($data['items']);

这利用了 Collat​​or 排序键而不是比较字符串本身,并用于在您的 usort 匿名函数中对字符串进行排序。不过,您很可能必须更改 usort 函数中的参数及其语言环境。

【讨论】:

  • 对不起,我误解了你...这个整理器按预期工作!非常感谢!
  • @MarekVeselý 没问题,很高兴我能提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
相关资源
最近更新 更多