在数组中找到3个或更多匹配

时间:2014-04-04 11:49:53

标签: php arrays matching

我想查找数组中是否存在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);

它不会返回任何内容,它不适用于所有数组。

它必须是彼此相邻的,所以连续匹配不仅仅是匹配,如果在同一个数组中有更多的匹配 我做错了什么?

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您的代码存在问题,即您使用$i < count($array)[$i+2]

的数组边界用完了

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

即可

编辑:您错过了循环中的$

答案 2 :(得分: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);
?>

答案 3 :(得分: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);