合并查询结果

时间:2016-02-05 05:45:13

标签: laravel laravel-4

我有一个查询,它以以下格式将其值输出为json:

[
    {
        "name":"Bob",
        "date":"2016-02-05 00:00:00",
        "value":34
    },
    {
        "name":"John",
        "date":"2016-02-05 00:00:00",
        "value":5
    },
    {
        "name":"Bob",
        "date":"2016-02-05 00:00:00",
        "value":3
    },
    {
        "name":"Sarah",
        "date":"2016-02-05 00:00:00",
        "value":56
    }

    ...
]

我需要将这些数据放入表格中:

[
    {
        "name":"Bob",
        "data": [
            [2016-02-05 00:00:00, 34],
            [2016-02-05 00:00:00, 3]
        ]
    },
    {
        "name":"John",
        "data": [
            [2016-02-05 00:00:00, 5]
        ]
    },
    {
        "name":"Sarah",
        "data": [
            [2016-02-05 00:00:00, 56]
        ]
    }

    ...
]

或者换句话说,我需要合并共享name的结果并将数据放入数组data,其中每个数组包含date和{{1} }。

原始json数据保存在变量value

$results

我如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

这样的东西
function process_results($results) {
   $out = [];

   foreach ($results as $result) {
      $name = $result['name'];
      if ( ! $out[$name]) {
         $out[$result['name']] = array( 'name' => $name, 'data' => array());
      }

      array_push($out[$name]['data'], array($result['date'], $result['value']));
   }

   return array_values($out);
}

这似乎也有效

function process_results($results) {
   return array_values(array_reduce($results, function($acc, $result) {
      $name = $result['name'];
      if ( ! $acc[$name]) {
         $acc[$result['name']] = array( 'name' => $name, 'data' => array());
      }

      $acc[$name]['data'][] = array($result['date'], $result['value']);
      return $acc;
  }, []));
}
相关问题