我必须使用返回JSON的webservice。解码JSON后,我得到数组:
$arrays[0]["2013-04-09"]=$someValue;
$arrays[1]["2013-04-09"]=$someValue;
$arrays[2]["2013-04-11"]=$someValue;
$arrays[3]["2013-04-05"]=$someValue;
$arrays[4]["2013-04-09"]=$someValue;
我想要排序(稳定方式并使用第二个暗键的键)数组并得到结果:
$arrays[3]["2013-04-05"];
$arrays[0]["2013-04-09"]; //stable way don't swap with next val
$arrays[1]["2013-04-09"]; //stable way don't swap with next and prev vel
$arrays[4]["2013-04-09"]; //stable way, don't swap with prev val
$arrays[2]["2013-04-11"];
你能帮帮我吗?我尝试创建自己的排序功能,因为只使用第一个昏暗键,ksort或krsort排序。谢谢你的回答。
编辑: 我尝试编写自己的函数 - 这样做 - 我的单元测试中出现错误的“有效答案”,这就是我说这不起作用的原因:
private function getResult(){
...
usort($arrays,array($this,'mycmp'));
...
}
private function mycmp($a, $b){
foreach($a as $key=>$val){
$first = $key;
}
foreach($b as $key=>$val){
$second = $key;
}
if ($first == $second){
return 0;
}
return ($first < $second) ? -1:1;
}
感谢帮助
答案 0 :(得分:0)
假设每个子数组都在同一位置具有日期键(例如,始终是对象中的第一个键),您可以执行以下操作:
$keyPosition = 0; // location of the key in the array structures
usort($data, function ($a, $b) use ($keyPosition) {
$aKeys = array_keys($a);
$bKeys = array_keys($b);
return strcmp($aKeys[$keyPosition], $bKeys[$keyPosition]);
});
然而,您应该注意的是PHP no longer supports stable sorting,因此您可能无法获得与之前完全相同的顺序。如果这是绝对要求,您可能需要滚动自己的排序功能。 Here's a Gist that might help