删除数组中的重复元素

4
我正在浏览有关PHP的问题,其中一个问题让我卡住了。该问题是:
您有一个PHP一维数组。请编写一个PHP函数,以1个数组作为其参数并返回一个数组。该函数必须删除出现3次或更多的输入数组中的值?
例如,如果您给出以下数组:
array(1, 3, 5, 2, 6, 6, 6, 3, 1, 9)
则该函数将返回:
array(1, 3, 5, 2, 3, 1, 9)
我能够检查它们是否重复,但我将其应用于我获得的输入数组。
function removeDuplicate($array){
    $result = array_count_values( $array );
    $values = implode(" ",  array_values($result));
    echo $values . "<br>";  
}

$qArray = array(1, 3, 5, 2, 6, 6, 6, 3, 1, 9);
removeDuplicate($qArray);

还有一件事,我们不能使用array_unique因为它包含了重复的值,而在问题中我们需要完全将它们从当前数组中删除。


在数组中连续出现3次或更多次,或者随处可见? - Ja͢ck
在执行array_count_values()之后,使用$values = array_filter($values, function($value) { return $value <= 3; })。但是你的函数接下来需要返回array_keys($values) - Mark Baker
你还没有回复任何一个答案,我们是否正确理解了这个问题? - Ja͢ck
是的,杰克,我认为其中一些人已经解决了我的问题。不过我已经解决了我的问题。我很快就会标记正确的答案。 - Fahad Sohail
6个回答

1
这应该可以工作:

function removeDuplicate($array) {
    foreach ($array as $key => $val) {
        $new[$val] ++;
        if ($new[$val] >= 3)
            unset($array[$key]);
    }
    return $array;
}

1
运行这个函数,希望这能帮到你。
function removeDuplicate($array){
    $result = array_count_values( $array );
    $dub = array();
    $answer = array();
    foreach($result as $key => $val) {
        if($val >= 3) {
            $dub[] = $key;
        }
    }
    foreach($array as $val) {
        if(!in_array($val, $dub)) {
            $answer[] = $val;
        }
    }
    return $answer;
}

1
您可以使用此函数,出现次数可以任意设置,默认为3。
function removeDuplicate($arr, $x = 3){
    $new = $rem = array();
    foreach($arr as $val) {
        $new[$val]++;
        if($new[$val]>=$x){
            $rem[$val]=$new[$val];
        }
    }
    $new = array_keys(array_diff_key($new, $rem));
    return $new;
}

1

假设该值在数组的任何位置都不会出现3次或以上:

$array = array(1, 3, 5, 2, 6, 6, 6, 3, 1, 9);

// create array indexed by the numbers to remove    
$remove = array_filter(array_count_values($array), function($value) {
    return $value >= 3;
});

// filter the original array
$results = array_values(array_filter($array, function($value) use ($remove) {
    return !array_key_exists($value, $remove);
}));

如果值不能连续出现3次以上:
$results = [];
for ($i = 0, $n = count($array); $i != $n;) {
    $p = $i++;
    // find repeated characters
    while ($i != $n && $array[$p] === $array[$i]) {
        ++$i;
    }

    if ($i - $p < 3) {
        // add to results
        $results += array_fill(count($results), $i - $p, $array[$p]);
    }
}

1

我认为输出已经正确了。只需要尝试一次。

 $array=array(1,2,3,7,4,4,3,5,5,6,7);
 $count=count($array);
 $k=array();
 for($i=0;$i<=$count;$i++)
 {
 if(!in_array($array[$i],$k))
 {
 $k[]=$array[$i];
 }
 }
 array_pop($k);
 print_r($k);

在这里,$k是一个空数组,在此之后,我们将值插入到$k中。

0
你应该使用 array_unique 函数。
<?php
    $q = array(1, 3, 5, 2, 6, 6, 6, 3, 1, 9);
    print_r(array_unique($q));
?>

试一下,如果可以的话请告诉我。


另外,这将返回[1, 3, 5, 2, 6, 9],这不是 OP 想要的。 - Ja͢ck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接