小编典典

如何使用PHP查找序列中的缺失值?

algorithm

假设您有一个数组“ value => timestamp”。值随时间增加,但可以随时重置。

例如 :

$array = array(
1 => 6000,
2 => 7000,
3 => 8000,
7 => 9000,
8 => 10000,
9 => 11000,
55 => 1000,
56 => 2000,
57 => 3000,
59 => 4000,
60 => 5000,
);

我想从此数组中检索所有缺少的值。

此示例将返回:

array(4,5,6,58)

我不希望9到55之间的所有值,因为9比其他更高的值新。

在实际情况下,脚本将处理数千个值,因此它需要高效。

谢谢你的帮助!


更新:如果算法更简单,则可以按时间戳对初始数组进行排序。


更新2:在我的示例中,值是UNIX时间戳,因此它们看起来更像这样:1285242603,但出于可读性原因,我对其进行了简化。


阅读 238

收藏
2020-07-28

共1个答案

小编典典

这是另一个解决方案:

$prev = null;
$missing = array();
foreach ($array as $curr => $value) {
    if (!is_null($prev)) {
        if ($curr > $prev+1 && $value > $array[$prev]) {
            $missing = array_merge($missing, range($prev+1, $curr-1));
        }
    }
    $prev = $curr;
}
2020-07-28