douzhong4222 2019-05-10 06:25
浏览 225
已采纳

php从多维数组中获取最多和最少的值

I want to get most and least occuring values from php sequential/indexes, assoc and multidimensional arrays

Consider the following dataSet

        $dataSet = [
            'users' => 
            [
                'id' => 1,
                'name' => "Alex",
                'username' => 'alex',
            ],
            [
                'id' => 2,
                'name' => "Alex",
                'username' => 'alex'
            ],
            [
                'id' => 2,
                'name' => "Peter Khot",
                'username' => 'peter',
            ]
        ];

Here above are samples dataSet

Here is what that i tried

    function most_occurring(array $array, $key)
    {
        $dataSet = [];
        $i = 0;
        $keys = [];
        foreach ($array as $k) {
            if (in_array($k[$key], $keys)) {
                $keys[$i] = $k[$key];
                $dataSet[$i] = $k;
            } 

            $i++;
        }

        return $dataSet;
    }

I tried above code for most occurring values but not working at all, help me in most and least occuring values from arrays. Thanks

  • 写回答

2条回答 默认 最新

  • drll42469 2019-05-10 07:15
    关注

    Thanks to KIKO Software, you can still use array_count_values() for this cases. You will also need to use array_columns() and array_search() in this situation. You can refer to this link to see how array_search() helps in finding the maximum/minimum value and its corresponding key inside an array. To find the most or least occurrence, simply echo the last 6 variables that I have declared in the last 6 lines.

    EDIT* reference: unset array_push

    *And also, your first data in the assoc array is indexed 'user', but the second data in the assoc array is not indexed and hence it is indexed as 0.

    $dataSet = [
                'users' => 
                [
                    'id' => 1,
                    'name' => "Alex",
                    'username' => 'alex',
                ],
                [
                    'id' => 2,
                    'name' => "Alex",
                    'username' => 'alex'
                ],
                [
                    'id' => 2,
                    'name' => "Peter Khot",
                    'username' => 'peter',
                ]
            ];
    $id = array_column($dataSet,'id');
    $name = array_column($dataSet, 'name');
    $username = array_column($dataSet, 'username');
    $occur_id = array_count_values($id);
    $occur_name = array_count_values($name);
    $occur_username = array_count_values($username);
    $most_occur_id  = array_search(max($occur_id),$occur_id);
    $most_occur_name  = array_search(max($occur_name),$occur_name);
    $most_occur_username  = array_search(max($occur_username),$occur_username);
    $least_occur_id  = array_search(min($occur_id),$occur_id);
    $least_occur_name  = array_search(min($occur_name),$occur_name);
    $least_occur_username  = array_search(min($occur_username),$occur_username);
    

    EDIT*: (In case of multiple highest occurence OR all same occurence, just add below code right below the above code.)

    $flag = true;
    $most_occur_name_list = [];
    $count = 0;
    while($flag)
    {
      $most_occur_name_ct =  max($occur_name);
      if($most_occur_name_ct == $count || $count == 0)
        {
          array_push($most_occur_name_list,array_search($most_occur_name_ct,$occur_name));
          unset($occur_name[array_search($most_occur_name_ct,$occur_name)]);
          $count = $most_occur_name_ct;
          if(count($occur_name) == 0)
          {
              $flag = false;
              break;
          }
        }
      else
        {
          $most_occur_name_ct = $count;
          $flag = false;
          break;
        }
    }
    
    //must reinitialize the array
    $occur_name = array_count_values($name);
    $flag = true;
    $least_occur_name_list = [];
    $count = 0;
    while($flag)
    {
      $least_occur_name_ct =  min($occur_name);
      if($least_occur_name_ct == $count || $count == 0)
        {
          array_push($least_occur_name_list,array_search($least_occur_name_ct,$occur_name));
          unset($occur_name[array_search($least_occur_name_ct,$occur_name)]);
          $count = $least_occur_name_ct;
          if(count($occur_name) == 0)
          {
              $flag = false;
              break;
          }
        }
      else
        {
          $least_occur_name_ct = $count;
          $flag = false;
          break;
        }
    }
    if($most_occur_name_ct == $least_occur_name_ct)
    {
        $most_occur_name_list = [];
        $least_occur_name_list = [];
    }
    echo "<pre>";
    print_r($most_occur_name_list);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭