按日期对数组进行分组,并将值设置为键

时间:2017-07-17 03:47:34

标签: php arrays datetime grouping

我有一个像这样的数组

 0 => 
array (size=3)
  'datetime_read' => '2017-07-16 20:45:08'
  'parameter_name' =>  'Rainfall Amount'
  'reading' => '0.00'

 1 => 
array (size=3)
  'datetime_read' =>  '2017-07-16 20:45:08'
  'parameter_name' =>  'Rainfall Intensity'
  'reading' =>  '0.0'

2 => 
array (size=3)
  'datetime_read' => '2017-07-16 20:45:08' 
  'parameter_name' => 'Air Pressure' 
  'reading' =>  '77.45' 

我需要按日期对数据进行分组,并获取参数名称和读取值

 [0] => Array
        (
            'datetime_read' => '2017-07-16 20:45:08'
            'Rainfall Amount' => '0.00'
            'Rainfall Intensity' => '0.0'
            'Air Pressure' => '77.45'
        )

2 个答案:

答案 0 :(得分:0)

有多种方法可以解决这个问题。这就是我要解决的问题:

  1. 查找具有最大大小的数组,并编写一个直到该最大值的循环
  2. 在循环外初始化一个新数组。这将是最终的数组
  3. 每次遍历循环时,请检查所有这些数组的日期。如果新数组中已存在日期,则只需添加这些参数即可。否则,您还必须在数组中添加日期。

答案 1 :(得分:0)

试试这个(假设$input是您的输入):

$combined = array_reduce(
    $input,
    function (array $carry, array $item) {
        $datetimeRead = $item['datetime_read'];
        $parameterName = $item['parameter_name'];
        $reading = $item['reading'];

        $carry[$datetimeRead['datetime_read'] = $datetimeRead;
        $carry[$datetimeRead][$parameterName] = $reading;

        return $carry;
    },
    []
);

ksort($combined);

$data = array_values($combined);

供参考,见: