假设您有一个数组“ 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,但出于可读性原因,我对其进行了简化。
这是另一个解决方案:
$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; }