【问题标题】:PHP Merging two continous time series data arrays by aligning timestampPHP通过对齐时间戳合并两个连续的时间序列数据数组
【发布时间】:2016-10-12 08:44:58
【问题描述】:

我有一个主数据数组,它始终由 600 秒的数据按时间升序排列。数据如下所示:

[{'timestamp' => '2016-10-10T10:00:00', 'p_value' => 55 },
{'timestamp' => '2016-10-10T10:00:01', 'p_value' => 57 },
{'timestamp' => '2016-10-10T10:00:02', 'p_value' => 51 },
{'timestamp' => '2016-10-10T10:00:03', 'p_value' => 54 },
{'timestamp' => '2016-10-10T10:00:04', 'p_value' => 48 }]

我有一个二级阵列,其中包含长达 600 秒的数据。此数据是主数据数组的时间戳的连续“子集”,但开始(和结束)时间戳值可能会有所不同:

[{'timestamp' => '2016-10-10T10:00:01', 's_value' => 1221 },
{'timestamp' => '2016-10-10T10:00:02', 's_value' => 4322 },
{'timestamp' => '2016-10-10T10:00:03', 's_value' => 2414 },]

如何通过时间戳将辅助数组与主数组“对齐”,然后以计算效率最高的方式将“s_values”添加到主数组中?

我已经使用嵌套的 foreach 循环实现了一些非常相似的东西,但是我认为这是 O(N^2) 复杂度。

【问题讨论】:

    标签: php arrays merge


    【解决方案1】:

    假设第一个数组在$firstArr,第二个数组在$secondArr,同时假设

    $secondArr[count($secondArr)-1]['timestamp] <= $firstArr[count($firstArr)-1]['timestamp'])

    意味着第二个数组不包含第一个数组中可能不存在的时间戳,那么下面的代码会在线性时间内完成您想要的合并(没有 O(n^2))

    首先在$firstArr 中找到$secondArr 的第一个时间戳并将其索引保存在一个变量中。然后它从该索引开始复制 p_values。

    for($i=0; $i<count($firstArr); $i++)
    {
        if($firstArr[$i]['timestamp'] == $secondArr[0]['timestamp'])
        {
            $startingIndex = $i;
            break;
        }
    }
    
    for($i=0; $i<count($secondArr); $i++)
    {
        $firstArr[$startingIndex+$i]['s_value'] = $secondArr[$i]['s_value'];
    }
    

    【讨论】:

    • 感谢您提供此解决方案,我已实施并确认它按预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2017-10-06
    • 2013-07-09
    • 2013-01-26
    • 1970-01-01
    相关资源
    最近更新 更多