我想查找数组中是否存在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 :(得分:0)
我建议array_count_values和array_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);