Skip to main content

How to detect duplicate values in PHP array?



I am working with a one dimensional array in PHP. I would like to detect the presence of duplicate values, then count the number of duplicate values and out put the results. For example, given the following array:







$array = array('apple', 'orange', 'pear', 'banana', 'apple',

'pear', 'kiwi', 'kiwi', 'kiwi');







I would like to print:







apple (2)

orange

pear (2)

banana

kiwi (3)







Any advice on how to approach this problem?





Thanks.





Mike



Source: Tips4all

Comments

  1. use array_count_values

    $array = array('apple', 'orange', 'pear', 'banana', 'apple',
    'pear', 'kiwi', 'kiwi', 'kiwi');

    print_r(array_count_values($array));


    will output

    Array
    (
    [apple] => 2
    [orange] => 1
    [pear] => 2
    etc...
    )

    ReplyDelete
  2. if(count(array_unique($array))<count($array))
    {
    // Array has duplicates
    }
    else
    {
    // Array does not have duplicates
    }

    ReplyDelete
  3. to get rid use array_unique. To detect if have any use count(array_unique) and compare to count(original array).

    ReplyDelete
  4. function array_not_unique( $a = array() )
    {
    return array_diff_key( $a , array_unique( $a ) );
    }

    ReplyDelete
  5. Stuff them into a map (pseudocode)

    map[string -> int] $m
    foreach($word in $array)
    {
    if(!$m.contains($word))
    $m[$word] = 0;

    $m[$word] += 1;
    }

    ReplyDelete
  6. Perhaps something like this (untested code but should give you an idea)?

    $new = array();

    foreach ($array as $value)
    {
    if (isset($new[$value]))
    $new[$value]++;
    else
    $new[$value] = 1;
    }


    Then you'll get a new array with the values as keys and their value is the number of times they existed in the original array.

    ReplyDelete
  7. You could try turning that array into a associative array with the fruits as keys and the number of occurrences as values. Bit long-winded, but it looks like:

    $array = array('apple', 'orange', 'pear', 'banana', 'apple',
    'pear', 'kiwi', 'kiwi', 'kiwi');
    $new_array = array();
    foreach ($array as $key => $value) {
    if(isset($new_array[$value]))
    $new_array[$value] += 1;
    else
    $new_array[$value] = 1;
    }
    foreach ($new_array as $fruit => $n) {
    echo $fruit;
    if($n > 1)
    echo "($n)";
    echo "<br />";
    }

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?