【问题标题】:php loop through array to find X consecutive numbersphp循环遍历数组以查找X个连续数字
【发布时间】:2015-08-08 10:25:02
【问题描述】:

我有一些代码可以从数组中找到 3 个连续的数字并输出它们。

我现在希望它能够告诉它要找到多少个数字。我确实考虑过在外部 for 循环中放置一个 for 循环,但我认为它无法正常工作。

我怎样才能让这个迭代运行 X 次直到满足 X?

 if(isset($arr[$i+1]))
            if($arr[$i]+1==$arr[$i+1])
            echo 'I found it:',$arr[$i],'|',$arr[$i+1],'|',$arr[$i+2],'|',$arr[$i+3],'<br>'; 
                    exit;

这就是我目前所拥有的

for($i=0; $i < sizeof($arr); $i++) { 
    if(isset($arr[$i+1]))
    if($arr[$i]+1==$arr[$i+1])
    {

        if(isset($arr[$i+2]))
        if($arr[$i]+2==$arr[$i+2]) 
        {

            if(isset($arr[$i+3]))       
            if($arr[$i]+3==$arr[$i+3])
            { 
                echo 'I found it:',$arr[$i],'|',$arr[$i+1],'|',$arr[$i+2],'|',$arr[$i+3],'<br>'; 
                exit;
            }//if3

        }//if 2

    }//if 1
}

【问题讨论】:

    标签: php for-loop


    【解决方案1】:

    您可以循环遍历数组,将当前值与前一个值进行比较,以查看这些值是否连续,同时跟踪当前的连续计数,而不是重复向前看。连续的数字应该附加到数组中,不连续的数字应该重新初始化数组。当您达到所需的连续数字计数时,您可以返回结果。

    function find_consecutive($array, $count) {
        $consecutive = array();
        $previous = null;
        foreach ($array as $value) {
            if ($previous !== null && $value == $previous + 1) {
                $consecutive[] = $value;
                if ($found == $count) {
                    return "I found it: " . implode("|", $consecutive) . "<br>";
                }
            } else {
                $consecutive = array($value);
                $found = 1;
            }
            $previous = $value;
            $found++;
        }
    }
    

    【讨论】:

    • 这正是我想要的。我确实尝试过使用 MySQL Levenshtein 函数,但这真的很慢,这在瞬间完成了我想要的
    猜你喜欢
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2011-05-23
    • 2012-11-14
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多