Fahad Sohail
Fahad Sohail

Reputation: 1836

Remove duplicates of array

I was just going through these questions for PHP and got stuck at one of them. The question is:

You have a PHP 1 dimensional array. Please write a PHP function that takes 1 array as its parameter and returns an array. The function must delete values in the input array that shows up 3 times or more?

For example, if you give the function

array(1, 3, 5, 2, 6, 6, 6, 3, 1, 9)the function will returnarray(1, 3, 5, 2, 3, 1, 9)

I was able to check if they are repeating themselves but I apply it to the array I am getting as input.

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

One more thing, we cannot use array_unique because it includes the value which is repeated and in question we totally remove them from the current array.

Upvotes: 4

Views: 188

Answers (6)

chinna123
chinna123

Reputation: 19

I think it is getting correct output. just try once.

 $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);

in this first $k is an empty array,after that we are inserting values into $k.

Upvotes: 1

Ja͢ck
Ja͢ck

Reputation: 173542

Assuming the value may not appear 3+ times anywhere in the array:

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

If values may not appear 3+ times consecutively:

$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]);
    }
}

Upvotes: 1

dev4092
dev4092

Reputation: 2891

You should use array_unique funciton.

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

Try it and let me know if it worked.

Upvotes: 0

Sergiu Pirlici
Sergiu Pirlici

Reputation: 140

You can use this function with any number of occurrences you want - by default 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;
}

Upvotes: 1

Hardik Ranpariya
Hardik Ranpariya

Reputation: 1051

run this function i hope this help..

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

Upvotes: 1

Alireza Fallah
Alireza Fallah

Reputation: 4607

This should work :

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

Upvotes: 1

Related Questions