首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多维数组按值计数

多维数组按值计数
EN

Stack Overflow用户
提问于 2019-04-10 01:49:12
回答 3查看 63关注 0票数 0
代码语言:javascript
复制
$feetypes=[
    [30,35,50],
    [30,35],
    [30,50],
    [30,34]
];

我有这个代码,想按照像计数30*4,35*2,50*2和34*1这样的值计数。

我已经试过了:

代码语言:javascript
复制
$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;
}

但我的问题仍然存在

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-10 02:06:46

我在值超过两层的情况下使用了递归。注意,由于递归,$count变量是通过引用传递给函数的。

代码语言:javascript
复制
<?php
$feetypes=[
    [30,35,50],
    [30,35],
    [30,50],
    [30,34]
];

$counts = array();

function countValues($arr, &$count) {
    foreach($arr as $subval) {
        if(is_array($subval)) {
            countValues($subval,$count);
        } else {
            if(isset($count[$subval])) {
                $count[$subval] += 1;
            } else {
                $count[$subval] = 1;
            }
        }
    }
}

countValues($feetypes,$counts);
print_r($counts);
票数 -1
EN

Stack Overflow用户

发布于 2019-04-10 01:56:14

您可以使用array_merge将所有内部数组合并为一个数组,然后使用array_count_values获取计数。

代码语言:javascript
复制
$counts = array_count_values(array_merge(...$feetypes));
票数 2
EN

Stack Overflow用户

发布于 2019-04-10 16:29:21

将所有子数组合并为一个数组,并应用array_count_values函数得到结果

代码语言:javascript
复制
function merageAll($arr) {
  $flatArray = array();
  foreach($arr as $element) {
    if (is_array($element)) {
        $flatArray = array_merge($flatArray, merageAll($element));
    } else {
        $flatArray[] = $element;
    }
  }
  return $flatArray;
 }
 $res = array_count_values(merageAll($feetypes));

结果

代码语言:javascript
复制
Array
(
 [30] => 4
 [35] => 2
 [50] => 2
 [34] => 1
)

如果数组中有值和子数组,则函数merageAll有效。

工作DEMO LINK

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55598503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档