count具有特定条件的数组元素

时间:2014-04-10 07:14:41

标签: php arrays

我有一个数组。 现在是一个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 acceptedtotal requesttotal 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。请举个例子。

1 个答案:

答案 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