2017-04-23 33 views
0

我从远程API获取JSON在PHP中,然后与usort我排序数据数组从a到z。但我需要用捷克语字母排序。在捷克语言的PHP排序数据数组结构

这是我当前的代码:

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

你能帮助我吗?

感谢

+0

这篇文章在这里http://www.informit.com/articles/article.aspx?p=1969707&seqNum=13确实用新鲜的字母排序。你可能只需要改变角色中的一些字母即可启动并运行。如果您使用的是大于或等于5.3的php版本,那么您可以使用Collat​​or Class,并使用文章底部解释的sort函数。 – cptnk

+0

是的,有PHP 5.4。我试过了,但没有工作......出了什么问题? '$ data = json_decode($ body,true)['data'] ['items']; $ collat​​or = new Collat​​or('cs_CZ'); $ collat​​or-> sort($ data ['city']);' –

+0

您必须给出一个包含所有项目的数组,而不仅仅是我假设的城市。你能用$ data数组结构更新你的问题吗? – cptnk

回答

0

既然你没有提供的阵列结构我只是假设之一。

$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 Sort Key而不是比较字符串本身,而是用来对你的usort匿名函数中的字符串进行排序。不过,您很可能必须更改usort函数及其语言环境中的参数。

+0

对不起,我误解了你...这个Collat​​or正在按预期工作!非常感谢! –

+0

@MarekVeselý没问题,很高兴我可以帮忙。 – cptnk