我有一个数组。 现在是一个json数组:
{
"status":"OK",
"details":{
"Jun":[
{
"id":"8",
"order_id":"0",
"client_id":"0",
"driver_id":"3",
"status":"accept",
"order_date":"2017-06-22"
},
{
"id":"13",
"order_id":"1",
"client_id":"0",
"driver_id":"3",
"status":"accept",
"order_date":"2017-06-22"
},
{
"id":"33",
"order_id":"1",
"client_id":"0",
"driver_id":"3",
"status":"decline",
"order_date":"2017-06-22"
}
],
"Apr":[
{
"id":"7",
"order_id":"12",
"client_id":"15",
"driver_id":"3",
"status":"accept",
"order_date":"2014-04-10"
}
]
}
}
我的数据现在按月显示。
我想每月展示一次数组,但计算total accepted
,total request
,total decline
。
我的预期输出看起来像:
{
"status":"OK",
"details":{
"Jun":[
{
"total accepted":"2",
"total decline":"1",
"total request":"3"
}
],
"Apr":[
{
"total accepted":"1",
"total decline":"0",
"total request":"1"
}
]
}
}
我当前的PHP代码是:
while ($row = mysql_fetch_assoc($result))
{
$details_sort[] = $row;
}
$monthlyDetails = array();
foreach ($details_sort as $detail)
{
$monthName = date('M', strtotime($detail['order_date']));
if (! array_key_exists($monthName, $monthlyDetails) )
{
$monthlyDetails[$monthName] = array();
}
array_push($monthlyDetails[$monthName], $detail);
}
我无法理解如何计算total accepted
,total request
,total decline
。请举个例子。
答案 0 :(得分:2)
您可以使用array_filter之类的;
<?php
$json = '{
"status":"OK",
"details":{
"Jun":[
{
"id":"8",
"order_id":"0",
"client_id":"0",
"driver_id":"3",
"status":"accept",
"order_date":"2017-06-22"
},
{
"id":"13",
"order_id":"1",
"client_id":"0",
"driver_id":"3",
"status":"accept",
"order_date":"2017-06-22"
}
,
{
"id":"33",
"order_id":"1",
"client_id":"0",
"driver_id":"3",
"status":"decline",
"order_date":"2017-06-22"
}
],
"Apr":[
{
"id":"7",
"order_id":"12",
"client_id":"15",
"driver_id":"3",
"status":"accept",
"order_date":"2014-04-10"
}
]
}
}';
$array = json_decode(json, true);
$result = array();
foreach ($array["details"] as $key => $value) {
$accepted = array_filter($value, function($item) {
return $item["status"] === "accept";
});
$declined = array_filter($value, function($item) {
return $item["status"] === "decline";
});
$result[$key] = array(
"total_accepted" => count($accepted),
"total_declined" => count($declined),
"total_request" => count($value)
);
}
var_dump($result);
您可以在此处查看演示: Demo