tags:

views:

68

answers:

2

First of all, I'd like to point out to all you duplicate question hunters that this question does not fully answer my question.

Now, I've got an array. We'll say that the array is array(1, 2, 2, 3, 4, 3, 2)

I need to remove the duplicates. Not just one of the duplicates, but all, so that the result will be array(1, 4)

I looked at array_unique(), but that will only result in array(1, 2, 3, 4)

Any ideas?

+4  A: 

You could use the combination of array_unique, array_diff_assoc and array_diff:

array_diff($arr, array_diff_assoc($arr, array_unique($arr)))
Gumbo
+1 for ingenuity, though it's hard to read the intent when you see a line like that!
Paul Dixon
this is significantly slower than Ciprian's approach though, I just did a quick benchmark and this is 4x slower. A little surprising.
Paul Dixon
+4  A: 

function removeDuplicates($array) {
   $valueCount = array();
   foreach ($array as $value) {
      $valueCount[$value]++;
   }

   $return = array();
   foreach ($valueCount as $value => $count) {
      if ( $count == 1 ) {
         $return[] = $value;
      }
   }

   return $return;
}
Ciprian L.
The first loop could more efficiently be replaced by $arrayCount=array_count_values($array)
Paul Dixon
But +1 to you, and welcome to Stack Overflow!
Paul Dixon
Thanks. I think the algorithm is important as well. Someone has already posted a solution using native PHP functions.
Ciprian L.