PHP通过对齐时间戳合并两个连续的时间序列数据数组


PHP Merging two continous time series data arrays by aligning timestamp

我有一个主数据数组,它总是由按时间升序排列的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)的复杂性。

假设第一个数组在$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'];
}