如何在多维数组上获得最多重复项

时间:2016-12-02 12:34:01

标签: php arrays

美好的一天,我试图在php上foreach循环中重复一遍。每个数组都是循环的循环。我需要获取最重复项目的idname,在此示例中是jake。

这是循环:

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

,输出为:

    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"
    }

我需要输出:

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

提前感谢您的所有答案。

2 个答案:

答案 0 :(得分:1)

您不必在此处使用显式循环:

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

arsort($counts);

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

基本上,我们将数组元素映射到JSON表示。这是通过array_map完成的。这样做是因为array_count_values只能计算字符串或整数。请注意,在使用json_encode之前,我们会使用ksort。如果用户数据相同但订单不同,则需要这样做。

然后我们使用arsort对保留数组键进行降序排序。

最后,我们使用key获取第一个密钥并对其进行解码,然后使用json_decode获取原始数组元素。

这是working demo

答案 1 :(得分:0)

尝试此步骤从阵列中删除重复项

$repeated  = array_map("unserialize", array_unique(array_map("serialize", $repeated)));