按时间顺序排列的数字 - PHP

时间:2012-10-16 17:49:40

标签: php math loops numbers

我需要找到按时间顺序排列的下一个数字。 例如,我有一个数组:

$numbers = array(1,2,4);

我希望函数给我一个缺少时间顺序的数字:3

更多示例:

$numbers = array(6,7,8,11);

需要给我:9

由于

3 个答案:

答案 0 :(得分:2)

我认为这样做的唯一方法是在数组上使用sort,然后遍历整个数组。

要在数组中的指定位置插入数字look at this

尽管使用nickb的答案 - 好多了!

答案 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);