【问题标题】:Chronological numbers order - PHP [closed]按时间顺序排列 - PHP [关闭]
【发布时间】:2012-10-16 17:49:39
【问题描述】:

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

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

我想要函数给我缺少的年代编号:3

更多示例:

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

需要给我:9

谢谢

【问题讨论】:

  • 在第二个数组上,为什么不是 10?另外,你试过什么?这闻起来很可疑。
  • 不过,挑战就是挑战!我 95% 确定这是家庭作业,但我们都需要在某个地方学习。至少这个人费心格式化帖子而不是复制粘贴它,并用损坏的 MS Word 字符完成。

标签: php math loops numbers


【解决方案1】:

只要假设数组是按以下方式排序的,解决方案就很简单:

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 范围之间的所有 缺失数字。

【讨论】:

  • 好点 - 但是如果您要获取数组的最小值和最大值,为什么不直接使用该范围来替换数组?编辑: OP 已编辑,不确定他是要填写数组还是要获取第一个缺失的数字。
  • @Jaxo - 我认为他正在寻找第一个丢失的号码。如果他希望数组填充它,这也可以使用$complete 变量来实现。 :)
【解决方案2】:

我看到这样做的唯一方法是在你的数组上使用sort,然后循环遍历整个数组。

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

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

【讨论】:

  • 没有内置函数array_sort(),你说的是sort()吧?
  • @JoshuaBurns 是的,我是,我刚刚修好了。很抱歉造成混乱!
【解决方案3】:

这应该可以解决问题:

<?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);

【讨论】:

    猜你喜欢
    • 2013-10-28
    • 2013-07-14
    • 2012-08-16
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多