Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to delete duplicates in an array?

Tags:

arrays

php

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

like image 588
Ali Avatar asked May 04 '13 08:05

Ali


2 Answers

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.
like image 104
Jon Avatar answered Sep 21 '22 02:09

Jon


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

like image 32
Ja͢ck Avatar answered Sep 21 '22 02:09

Ja͢ck