我需要找到按时间顺序排列的下一个数字。 例如,我有一个数组:
$numbers = array(1,2,4);
我希望函数给我一个缺少时间顺序的数字:3
更多示例:
$numbers = array(6,7,8,11);
需要给我:9
由于
答案 0 :(得分:2)
答案 1 :(得分:2)
一旦您假设数组按以下顺序排序,解决方案很简单:
sort( $numbers);
然后,您可以获得完整的数字范围,对整个集合和输入数组进行区别,并获取第一个元素(这将是第一个不同的元素):
由于数组已排序,我们可以像这样获取最小和最大元素(我们也可以调用min()
和max()
):
$min = current( $numbers);
$max = end( $numbers);
现在,我们使用range()
获取完整的数字集,然后致电array_diff()
找出差异:
$complete = range( $min, $max);
$diff = array_diff( $complete, $numbers);
第一个连续缺失的数字位于差异的第一个元素中:
$first_missing = array_shift( $diff);
此处的好处是,$diff
将包含$min
和$max
范围内缺失数字的所有。
答案 2 :(得分:1)
这应该可以解决问题:
<?php
function chrono_trigger($array) {
sort($array, SORT_NUMERIC);
$prev = False;
foreach($array as $num) {
if($prev === False) {
$prev = $num;
continue;
}
if($prev != ($num-1)) {
return $prev+1;
}
$prev = $num;
}
return False;
}
$numbers1 = array(1,2,4); // Should return 3
$numbers2 = array(6,7,8,11); // Should return 9
$numbers3 = array(1,2,3,4); // Shouldn't return anything
// Returns 3
$missing1 = chrono_trigger($numbers1);
var_export($missing1);
// Returns 9
$missing2 = chrono_trigger($numbers2);
var_export($missing2);
// Returns False
$missing3 = chrono_trigger($numbers3);
var_export($missing3);