2014-04-04 49 views
0

我想查找數組中是否有3個或更多的匹配項。我的代碼不起作用,但我不知道爲什麼。我想返回找到的索引。查找3個或更多匹配的數組

這是我的嘗試:

$array1 = array("bar", "bar", "bar", "foo","foo"); 
$array2 = array("foo", "bar", "bar", "bar","foo"); 
$array3 = array("foo", "bar", "bar", "bar","bar"); 


function checkForMatch($array){ 
for($i=0; $i < count($array);$i++){ 
if($array[i] == $array[i+1] && $array[i] == $array[i+2]){ 
echo "match for 3"; 
    } 
} 
} 

checkForMatch($array1); 

它不返回任何東西,它不工作的所有陣列。

它必須是彼此相鄰的如此連續的匹配不只是匹配,如果有更多的在同一個陣列中 我做錯了什麼?

回答

0

我推薦的array_count_valuesarray_filter組合:

<?php 
    $array1 = ["bar", "bar", "bar", "foo","foo"]; 

    $statistics = array_count_values($array1); 
    $array1 = array_filter($array1, function($el) use ($statistics) { 
     return $statistics[$el] > 2; 
    }); 

    var_dump($array1); 
+0

可以在這個沒有濾鏡陣列來完成?只是簡單的編碼?它不承認功能 – MichaelAngelo

+0

是的,它可以做到,請參閱@AbcAeffchen評論。我用PHP 5.4數組方括號初始化語法,如果你有更老的PHP版本,它將失敗(所以只需使用array()而不是[]) – Misiur

0

與您的代碼的問題是,你用完了數組邊界與$i < count($array)[$i+2]

只需使用$i < count($array)-2

編輯:您錯過了在循環中的$

+0

同樣的問題m8(不返回任何東西),但好的一個沒有看到它 – MichaelAngelo

+0

你也錯過如果您添加$ array4 = array(「foo」,「bar」,「foo」,「bar」,「foo」),則循環中的每個元素都是'$' – AbcAeffchen

0
<?php 
$array1 = array("bar", "bar", "bar", "foo", "foo"); 
$array2 = array("foo", "bar", "bar", "bar", "foo"); 
$array3 = array("foo", "bar", "bar", "bar", "bar"); 
function checkForMatch($array) 
{ 
    for ($i = 0; $i < count($array) - 2; $i++) 
    { 
     if ($array[$i] == $array[$i + 1] && $array[$i] == $array[$i + 2]) 
     { 
      echo '"' . $array[$i] . '" is equal or more than 3 times'; 
      break; 
     } 
    } 
} 
checkForMatch($array1); 
?> 
+0

;它會將它識別爲匹配 – MichaelAngelo

+0

你想要3場比賽?或連續3場比賽? – dikesh

+0

它必須彼此相鄰...如此連續 – MichaelAngelo

0

將顯示所有副本,其中數更多的則是3

function checkForMatch($aArray, $iMatch = 3) 
{ 
    $aCount = array_count_values($aArray); 

    foreach ($aCount as $sKey => $sCount) { 
     if ($sCount >= $iMatch) { 
      // return/do everything you need, array with duplicates found 
      echo $sKey . ' >= ' . $iMatch; 
     } 
    } 
} 

$aTest = array("bar", "bar", "bar", "foo", "foo"); 
checkForMatch($aTest); 
相關問題