1

I want to find duplicates in a multidimensional array and then echo out which one who has duplicates and which not. I've tried this code.

    $teams = array
  (
  "grupp_A" => array('Arsenal','Arsenal','Barcelona'),
  "grupp_B" => array('Milan','Man United','Barcelona'),
  "grupp_C" => array('Juventus','Barcelona','Barcelona'),
  "grupp_D" => array('Arsenal','Man United','Barcelona')
  );



foreach ( $teams as $key => $val ) {

  foreach($val as $k => $v) {

    if(count(array_unique($k))<count($k))
{
    echo "Array: $v has duplicates<br>";
}
else
{

    echo "Array: $v does not have duplicates<br>";
    }
    }
    }

Then I get the result

Array: Arsenal has duplicates
Array: Arsenal has duplicates
Array: Barcelona has duplicates
Array: Milan has duplicates
Array: Man United has duplicates
Array: Barcelona has duplicates
Array: Juventus has duplicates
Array: Barcelona has duplicates
Array: Barcelona has duplicates
Array: Arsenal has duplicates
Array: Man United has duplicates
Array: Barcelona has duplicates

But the result should look like this.

Array: grupp_A has duplicates
Array: grupp_C has duplicates
Array: grupp_B does not have duplicates
Array: grupp_D does not have duplicates

I'm stuck and don't know what I do wrong and need some help here.

I tried this code with in_array as suggested.

foreach ( $teams as $key => $val ) {

    if (in_array($key, $val)) {

    echo "Array: $key has duplicates<br>";
}
else
{

    echo "Array: $key does not have duplicates<br>";
    }
    }

Which gave the output

Array: grupp_A does not have duplicates
Array: grupp_B does not have duplicates
Array: grupp_C does not have duplicates
Array: grupp_D does not have duplicates

A bit closer but not there yet.

Anders
  • 63
  • 4

2 Answers2

1

Only one loop is enough, as you aggregate the clubs :

foreach($teams as $group => $clubs)
{
    if( count(array_unique($clubs)) < count($clubs) )
        echo "Group $group has duplicates" . PHP_EOL ;
    else
        echo "Group $group has no duplicates" . PHP_EOL ;
}

Output :

Group grupp_A has duplicates

Group grupp_B has no duplicates

Group grupp_C has duplicates

Group grupp_D has no duplicates

Community
  • 1
  • 1
Joffrey Schmitz
  • 2,393
  • 3
  • 19
  • 28
  • Thank you! I thought I had to do two loops beacause it was a multidimensional array. What is the PHP_EOL doing? Haven't seen that before. – Anders Mar 30 '20 at 20:00
  • It is the "end of line" constant, platform independent. It will be converted to '\r\n' on Windows, '\n' on Unix, ... – Joffrey Schmitz Mar 30 '20 at 20:14
0

I liked your array_unique approach, so sorry about throwing you off with my comment about in_array.

foreach ($teams as $key => $val) {
    if (count(array_unique($val)) == count($val)) {
        echo $key . " has no duplicates" . PHP_EOL;
    } else {
        echo $key . " has duplicates" . PHP_EOL;
    }
}
Mech
  • 3,952
  • 2
  • 14
  • 25