php从多维数组获取最多和最少出现的值 [英] php get most and least occurring values from Multidimensional arrays

查看:92
本文介绍了php从多维数组获取最多和最少出现的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从php顺序/索引,assoc和多维数组中获取最多和最少出现的值

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

考虑以下数据集

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

上面是示例数据集

这里我尝试过的是

    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

推荐答案

感谢KIKO Software,您仍然可以使用 array_count_values()在这种情况下。您还需要使用 array_columns() array_search()。您可以参考此链接,以了解array_search()如何帮助您找到数组中的最大/最小值及其对应的键。要查找最多或最少的事件,只需回显我在最后6行中声明的最后6个变量。

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 *参考:
未设置
array_push

EDIT* reference: unset array_push

*此外,您的第一个assoc数组中的数据被索引为用户,但assoc数组中的第二个数据未索引,因此索引为0。

*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);

这篇关于php从多维数组获取最多和最少出现的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆