1

Good day, Im trying to Get the most repeated inside a foreach loop on php. Each array is a cycle of the loop. I need to get the id and name of the most repeated item, in this example is jake.

This is the loop:

    foreach ($json[$key]['data'] as $user){
      var_dump($user);
    }

and the output is:

    array(2) {
      ["id"]=>
      string(4) "7032"
      ["name"]=>
      string(4) "Jake"
    }
    array(2) {
      ["id"]=>
      string(4) "1021"
      ["name"]=>
      string(3) "Ana"
    }
    array(2) {
      ["id"]=>
      string(4) "2058"
      ["name"]=>
      string(4) "John"
    }
    array(2) {
      ["id"]=>
      string(4) "7032"
      ["name"]=>
      string(4) "Jake"
    }

I need the output to be:

    $repeated = array(2) {
      ["id"]=>
      string(4) "7032"
      ["name"]=>
      string(4) "Jake"
    }

Thanks in advance for all your answers.

Oswaldo C.
  • 99
  • 7

2 Answers2

1

You don't have to use an explicit loop here:

$counts = array_count_values(array_map(function ($user) {
    ksort($user);
    return json_encode($user);   
}, $users));

arsort($counts);

$result = json_decode(key($counts), true);

Basically, we map array elements to JSON representations. This is done with array_map. And it is done because array_count_values can count only strings or integers. Pay attention that before using json_encode we use ksort. This is needed in case user data is the same but have a different order.

Then we sort descending preserving array keys with arsort.

Finally, we get the first key with key and decode it get the original array element with json_decode.

Here is working demo.

sevavietl
  • 3,762
  • 1
  • 14
  • 21
0

try this step to remove the duplicates from your array,

$repeated  = array_map("unserialize", array_unique(array_map("serialize", $repeated)));
Dave
  • 3,073
  • 7
  • 20
  • 33