【问题标题】:Group array by date and set value as keys按日期分组数组并将值设置为键
【发布时间】:2017-07-17 03:47:33
【问题描述】:

我有一个这样的数组

 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'
        )

【问题讨论】:

  • 您尝试了循环还是尝试了什么?
  • 你是如何获得数组的值的?
  • @Rasclatt 是的,我尝试了一个循环,但我的解决方案创建了一个多维数组。
  • 来自 sql 查询的@Vagabond

标签: php arrays datetime grouping


【解决方案1】:

试试这个(假设 $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);

参考见:

【讨论】:

  • 知道了!感谢你的回答!我遇到一个错误,只是函数子句中缺少“)”。
【解决方案2】:

有多种方法可以解决这个问题。这就是我将如何解决它:

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

【讨论】:

    猜你喜欢
    • 2017-02-25
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2021-03-09
    • 2019-02-07
    • 1970-01-01
    • 2012-05-13
    相关资源
    最近更新 更多