Anil Dewani
Anil Dewani

Reputation: 227

Show only duplicate elements from an array

I have an sorted array which contains first names of people. This array has lots of names which are same.

I want to output only duplicate names.

Example,

input array:

Array
(
    [0] => Abbas
    [1] => Abhay
    [2] => Abhinav
    [3] => Abhishek
    [4] => Aditya
    [5] => Ahmed
    [6] => Ahmed
    [7] => Ajay
    [8] => Ajay
}

It should return

Array
(
    [5] => Ahmed
    [6] => Ahmed
    [7] => Ajay
    [8] => Ajay
}

Upvotes: 10

Views: 12509

Answers (4)

anubhava
anubhava

Reputation: 785008

Use this code:

# assuming your original array is $arr
array_unique(array_diff_assoc($arr, array_unique($arr)));

It will return unique duplicates but if you want non-unique duplicates then use:

array_diff_assoc($arr, array_unique($arr));

EDIT: Based on your comments, try this code:

$uarr = array_unique($arr);
var_dump(array_diff($arr, array_diff($uarr, array_diff_assoc($arr, $uarr))));

OUTPUT

array(4) {
  [5]=>
  string(5) "Ahmed"
  [6]=>
  string(5) "Ahmed"
  [7]=>
  string(4) "Ajay"
  [8]=>
  string(4) "Ajay"
}

Upvotes: 19

NightHawk
NightHawk

Reputation: 3681

You could use this function http://php.net/manual/en/function.array-unique.php to get an array withoutt he duplicate values, then you can use this function http://www.php.net/manual/en/function.array-intersect.php to find the differences, maintaining key association.

Upvotes: 1

Marc B
Marc B

Reputation: 360602

Using array_count_values() to count up everything in the array, then filter the resulting array to show only the ones where there's more than 1:

$input = array(.... your names here ....);

$counts = array_count_values($input);

$duplicates = array_filter($counts, function element { return ($element > 1) });

Doing that off the top of my head, but should be enough to get you started.

Upvotes: 0

Denis de Bernardy
Denis de Bernardy

Reputation: 78433

Try array_reduce:

http://php.net/manual/en/function.array-reduce.php

Create a callback that populates an array using the values from $input as keys, and increments them accordingly. And then filter those that appear more than once.

Upvotes: 0

Related Questions