我试图按MONTH名称缩短数组。
[
{
"order_id":29,
"user_id":1,
"sum":20000,
"month":"April"
},
{
"order_id":34,
"user_id":17,
"sum":65000,
"month":"May"
},
{
"order_id":32,
"user_id":19,
"sum":15000,
"month":"July"
}
]
有什么方法可以快速排序吗?我需要名字格式的月份。
我期待的结果如下。
arsort
我尝试了krsort
,array_reverse()
,Process.Start("C:\\Users\\Administrator\\Desktop\\http_IE8.exe");
or
Process process=Runtime.getRuntime.exec("file path of exe or .bat files");
,但这些方法无法缩短它们。所以寻找其他解决方案。
谢谢! (提前)
答案 0 :(得分:3)
直接在这里不能应用任何函数,因为你的数据是json格式的,你可以像下面这样实现: -
$json = <<<JSON
[
{
"order_id":34,
"user_id":17,
"sum":65000,
"month":"May"
},
{
"order_id":32,
"user_id":19,
"sum":15000,
"month":"July"
},
{
"order_id":29,
"user_id":1,
"sum":20000,
"month":"April"
},
{
"order_id":29,
"user_id":1,
"sum":20000,
"month":"January"
}
]
JSON;
$arr = json_decode($json, true);
$months = [
'January' => 1,
'Feburary' => 2,
'March' => 3,
'April' => 4,
'May' => 5,
'June' => 6,
'July' => 7,
'August' => 8,
'September' => 9,
'October' => 10,
'November' => 11,
'December' => 12
];
usort($arr, function ($x, $y) use($months) {
return $months[$x['month']] - $months[$y['month']];
});
$json = json_encode($arr);
输出: - https://eval.in/598786
参考文献: -
答案 1 :(得分:2)
假设您已将JSON解码为二维数组,您可以尝试使用usort和回调函数来比较您的月份名称
$json_data = '[
{
"order_id":34,
"user_id":17,
"sum":65000,
"month":"May"
},
{
"order_id":32,
"user_id":19,
"sum":15000,
"month":"July"
},
{
"order_id":29,
"user_id":1,
"sum":20000,
"month":"April"
}
]';
function cmp_by_month($a, $b)
{
//Let's compare by month value
return strtotime($a["month"]) - strtotime($b["month"]);
}
$data = json_decode($json_data);
$result = usort($data, 'cmp_by_month');
答案 2 :(得分:1)
您需要使用test.png
将JSON转换为数组。
如果要将数组转换为JSON,则可以在转换之前执行这些操作。
创建一个月数组。
json_decode
方法在usort
。$months
将您的数组转换回JSON。<强> CODE 强>
json_encode