Aadi
Aadi

Reputation: 7109

Filter out duplicate values in array using php

Please help me to filter out only duplicate values in array using php.Consider,

$arr1 = array('php','jsp','asp','php','asp')

Here I would prefer to print only

array('php'=>2,
       'asp'=>2)

tried it by

print_r(array_count_values($arr1));

but, its getting count of each element.

Upvotes: 2

Views: 2840

Answers (2)

salathe
salathe

Reputation: 51950

If you don't want the counts, a simpler way would be to do:

$arr1 = array('php','jsp','asp','php','asp');
$dups = array_diff_key($arr1, array_unique($arr1));

Upvotes: 5

BoltClock
BoltClock

Reputation: 723638

OK, after the comments and rereading your question I got what you mean. You're still almost there with array_count_values():

$arr1 = array('php','jsp','asp','php','asp');
$counts = array_count_values($arr1);

You just need to remove the entries that are shown as only occurring once:

foreach ($counts as $key => $val) {
    if ($val == 1) {
        unset($counts[$key]);
    }
}

EDIT: don't want a loop? Use array_filter() instead:

// PHP 5.3+ only
$counts = array_filter($counts, function($x) { return $x > 1; });

// Older versions of PHP
$counts = array_filter($counts, create_function('$x', 'return $x > 1;'));

Upvotes: 7

Related Questions