2015-05-26 88 views
2

我有一些代码可以从数组中找到3个连续的数字并输出它们。PHP通过数组循环查找X个连续的数字

我现在想要做的是能够告诉它需要找到多少个数字。我曾考虑在外部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 
} 

回答

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++; 
    } 
} 
+0

这正是我所期待的。我曾尝试使用MySQL Levenshtein函数,但实际上这很慢,这就是我想要的瞬间 – AdRock