6

How can I delete duplicates in array?

For example if I had the following array:

$array = array('1','1','2','3');

I want it to become

$array = array('2','3');

so I want it to delete the whole value if two of it are found

2

5 Answers 5

4

Depending on PHP version, this should work in all versions of PHP >= 4.0.6 as it doesn't require anonymous functions that require PHP >= 5.3:

function moreThanOne($val) {
    return $val < 2;
}


$a1 = array('1','1','2','3');
print_r(array_keys(array_filter(array_count_values($a1), 'moreThanOne')));

DEMO (Change the PHP version in the drop-down to select the version of PHP you are using)

This works because:

  1. array_count_values will go through the array and create an index for each value and increment it each time it encounters it again.
  2. array_filter will take the created array and pass it through the moreThanOne function defined earlier, if it returns false, the key/value pair will be removed.
  3. array_keys will discard the value portion of the array creating an array with the values being the keys that were defined. This final step gives you a result that removes all values that existed more than once within the original array.
Sign up to request clarification or add additional context in comments.

5 Comments

Anonymous functions were introduced in 5.3
Good point, so to modify the "not just PHP 5.4" it will be "for PHP > 4.0.6" ^^
It would work in 4.0.6 too, which is when array_filter was introduced :)
+1 good usage of native php-functions. Well explained and a demo.
Grr @jack =P Lol, again, good point, maybe to tired to be creating version requirements for code. =]
4

You can filter them out using array_count_values():

$array = array('1','1','2','3');
$res = array_keys(array_filter(array_count_values($array), function($freq) {
    return $freq == 1;
}));

The function returns an array comprising the original values and their respective frequencies; you then pick only the single frequencies. The end result is obtained by retrieving the keys.

Demo

Comments

2

Try this code,

<?php
  $array = array('1','1','2','3');

 foreach($array as $data){
  $key= array_keys($array,$data);
   if(count($key)>1){

  foreach($key as $key2 => $data2){
    unset($array[$key2]);
      }
    }
   }
   $array=array_values($array);
   print_r($array);


?>

Output

    Array ( [0] => 2 [1] => 3 )

Comments

2

PHP offers so many array functions, you just have to combine them:

$arr = array_keys(array_filter(array_count_values($arr), function($val) {
    return $val === 1;
}));

Reference: array_keys, array_filter, array_count_values

DEMO

Comments

2

Remove duplicate values from an array.

 array_unique($array)

 $array = array(4, "4", "3", 4, 3, "3");
 $result = array_unique($array);
 print_r($result);

 /*
   Array
   (
      [0] => 4
      [2] => 3
   )
  */

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.