Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除阵列的重复项_Php_Arrays_Duplicates - Fatal编程技术网

Php 删除阵列的重复项

Php 删除阵列的重复项,php,arrays,duplicates,Php,Arrays,Duplicates,我刚刚为PHP复习了这些问题,却被其中一个问题难住了。问题是: 您有一个PHP一维数组。请编写一个PHP函数 将1数组作为其参数并返回一个数组。该函数必须 是否删除显示3次或以上的输入数组中的值 例如,如果您给出函数 数组(1,3,5,2,6,6,6,3,1,9)函数将返回array(1,3,5,2,3,1,9) 我能够检查它们是否在重复,但我将其应用于作为输入获取的数组 function removeDuplicate($array){ $result = array_count_va

我刚刚为PHP复习了这些问题,却被其中一个问题难住了。问题是:

您有一个PHP一维数组。请编写一个PHP函数 将1数组作为其参数并返回一个数组。该函数必须 是否删除显示3次或以上的输入数组中的值

例如,如果您给出函数

数组(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);
function removedupplicate($array){
$result=数组\计数\值($array);
$values=内爆(“,数组_值($result));
回显$value。“
”; } $qArray=数组(1,3,5,2,6,6,6,3,1,9); 移除副本($qArray);

还有一件事,我们不能使用
array\u unique
,因为它包含重复的值,因此我们将它们从当前数组中完全删除。

您应该使用array\u unique函数

<?php
    $q = array(1, 3, 5, 2, 6, 6, 6, 3, 1, 9);
    print_r(array_unique($q));
?>

试试看,让我知道它是否有效。

这应该可以:

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

运行此函数,希望对您有所帮助

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;
}

您可以将此函数用于任意次数的引用(默认为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;
}

假设该值在数组中的任何位置都不会出现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]);
    }
}
$results=[];
对于($i=0,$n=count($array);$i!=$n;){
$p=$i++;
//查找重复字符
而($i!=$n&&$array[$p]===$array[$i]){
++$i;
}
如果($i-$p<3){
//添加到结果中
$results+=数组填充(计数($results),$i-$p,$array[$p]);
}
}

我认为它得到了正确的输出。试试看

 $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);
$array=数组(1,2,3,7,4,4,3,5,5,6,7);
$count=计数($array);
$k=数组();

对于($i=0;$i连续或在数组中的任何位置最多显示3次?执行
$values=array\u过滤器($values,function($value){return$value您还没有回答任何答案;我们是否正确理解了问题?是的,Jack,我想其中一些问题已经解决了。不过我的问题已经解决了。我很快会标记正确答案。此外,这将返回
[1,3,5,2,6,9]
,而OP不希望返回这些答案。