2014-04-10 34 views
1

我有一个数组。 现在,它的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 acceptedtotal requesttotal decline。请给我一些例子。

回答

2

你可以使用array_filter like;

<?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); 

你可以看到演示的位置: