2011-06-10 70 views
1

搜索數組中連續值的最佳方式是什麼?在數組中搜索連續值

例如,在array('x', 'a', 'b', 'c')中搜索array('a', 'b')將產生1,因爲這些值首先在該索引處連續出現。

+0

有沒有重複的值? – hakre 2011-06-10 01:27:41

+0

這兩個數組中都沒有重複的值 – babonk 2011-06-10 01:49:15

回答

0

沒有測試過這一點,但這樣的事情應該做的:

function consecutive_values(array $needle, array $haystack) { 
    $i_max = count($haystack)-count($needle); 
    $j_max = count($needle); 
    for($i=0; $i<$i_max; ++$i) { 
     $match = true; 
     for($j=0; $j<$j_max; ++$j) { 
      if($needle[$j]!=$haystack[$i+$j]) { 
       $match = false; 
       break; 
      } 
     } 
     if($match) { 
      return $i; 
     } 
    } 
    return -1; 
} 
+0

這比我的方法要好。測試。作品。 – Nemoden 2011-06-10 01:07:18

0

這可能是次優的,但相當簡潔:

$needle = array('a', 'b'); 
$haystack = array('x', 'a', 'b', 'c'); 

function searchInArray($haystack, $needle) 
{ 
    $keys = array_search($haystack, $needle[0]); 

    foreach ($keys as $key) { 
     $endPos = $key + count($needle); 
     for ($i=1; $i<$count($needle); $i++) { 
      if ($needle[$i] == $haystack[$key + $i]) { 
       return $key; 
      } 
     } 
    } 
    return false; 
} 
+0

你在第一場比賽中返回......他們*全部*需要匹配。 – mpen 2011-06-10 05:20:42

0

這確實你問什麼,因爲所有數組都必須是非鍵控的,並且具有唯一值,所以它具有一定的特定性。

此外,在此版本中,數組只能包含整數或字符串值。如果您還需要任何NULL,對象,浮點數組和數組,它的一部分需要從array_flip() + isset()更改爲array_search()

CodePad/Gist

相關部分是比較您搜索的(這裏$in)的陣列與陣列的你搜索(這裏$for)切片:

array_slice($in, $pos, $len) === $for 

$pos一直第一個值爲$for,$len的值爲count($for)

+0

請將您代碼的相關部分發布在您的答案中(除了鏈接到演示)。 – 2011-06-10 02:51:30