2015-05-26 137 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