php - 计算多维数组中的值

标签 php arrays foreach counting

我目前有以下数组:

Array(
        [0] => Array
            (
                [user] => Name 1
                [group] => 1
            )
        [1] => Array
            (
                [user] => Name 2
                [group] => 1
            )
        [2] => Array
            (
                [user] => Name 3
                [group] => 2
            )
        [3] => Array
            (
                [user] => Name 4
                [group] => 2
            )
        [4] => Array
            (
                [user] => Name 5
                [group] => 3
            )
)

我正在尝试创建一个以各种 group 值作为键的新数组,然后计算每个组中有多少个,得到以下结果:

Array
(
    [1] => 2
    [2] => 2
    [3] => 1
)

我尝试使用以下内容,但收到 undefined index 警告:

$newArr = array();
foreach ($details['user_groups'] as $key => $value) {
        $newArr[$value['user_groups']]++;
}

(我确实检查了 SO 的其他答案,但是找不到尝试这样做的人)

最佳答案

这可以通过简单的迭代来完成:

$counts = array();
foreach ($array as $key=>$subarr) {
  // Add to the current group count if it exists
  if (isset($counts[$subarr['group']]) {
    $counts[$subarr['group']]++;
  }
  // or initialize to 1 if it doesn't exist
  else $counts[$subarr['group']] = 1;

  // Or the ternary one-liner version 
  // instead of the preceding if/else block
  $counts[$subarr['group']] = isset($counts[$subarr['group']]) ? $counts[$subarr['group']]++ : 1;
}

PHP 5.5 更新

在 PHP 5.5 中,添加了 array_column()从二维数组聚合内部键的函数,这可以简化为:

$counts = array_count_values(array_flip(array_column($array, 'group')));

关于php - 计算多维数组中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10215659/

相关文章:

php - 从 cli php 脚本进行管道传输时,如何识别击键?

php - 使用 GROUP_CONCAT 的 SQL 查询出现意外结果

php - 注册脚本不再将用户插入表中,不允许登录

arrays - Julia 中的数组排序

php - 将 json 数据传递到 smart suggest jquery 插件

java - 有没有办法缩短java中的for-each循环?

Git 远程分支列表

php - 带引号的 URL 导致错误

php foreach多个数组超时

java - 错误:找不到符号 - stream().toArray(String[]::new);