繁体   English   中英

PHP 计算嵌套数组中的唯一值

[英]PHP Count unique values from a nested array

我有返回一些值的 JSON 查询。 在这个响应中,有一个名为“groups”的子数组,在该嵌套组内有许多“groupid”。 我只需要一种方法来计算这些并将结果放入数组中。

JSON 响应如下所示...

{"jsonrpc":"2.0","result":[{"triggerid":"31376","groups":[{"groupid":"21"}]},{"triggerid":"31377","groups":[{"groupid":"21"}]},{"triggerid":"31374","groups":[{"groupid":"21"}]},{"triggerid":"37253","groups":[{"groupid":"72"}]},{"triggerid":"37252","groups":[{"groupid":"72"}]},{"triggerid":"32633","groups":[{"groupid":"38"}]},{"triggerid":"41296","groups":[{"groupid":"31"}]},{"triggerid":"41335","groups":[{"groupid":"31"}]},{"triggerid":"41377","groups":[{"groupid":"31"}]},{"triggerid":"41299","groups":[{"groupid":"31"}]},{"triggerid":"41380","groups":[{"groupid":"31"}]},{"triggerid":"41302","groups":[{"groupid":"31"}]},{"triggerid":"41383","groups":[{"groupid":"31"}]},{"triggerid":"41386","groups":[{"groupid":"31"}]},{"triggerid":"41305","groups":[{"groupid":"31"}]},{"triggerid":"41341","groups":[{"groupid":"31"}]},{"triggerid":"41389","groups":[{"groupid":"31"}]},{"triggerid":"41308","groups":[{"groupid":"31"}]},{"triggerid":"41344","groups":[{"groupid":"31"}]},{"triggerid":"41392","groups":[{"groupid":"31"}]},{"triggerid":"33404","groups":[{"groupid":"39"}]},{"triggerid":"33405","groups":[{"groupid":"39"}]},{"triggerid":"41311","groups":[{"groupid":"31"}]},{"triggerid":"41347","groups":[{"groupid":"31"}]},{"triggerid":"42408","groups":[{"groupid":"99"}]},{"triggerid":"42409","groups":[{"groupid":"99"}]},{"triggerid":"33407","groups":[{"groupid":"39"}]},{"triggerid":"33408","groups":[{"groupid":"39"}]},{"triggerid":"41314","groups":[{"groupid":"31"}]},{"triggerid":"41350","groups":[{"groupid":"31"}]},{"triggerid":"33410","groups":[{"groupid":"39"}]},{"triggerid":"33411","groups":[{"groupid":"39"}]},{"triggerid":"41317","groups":[{"groupid":"31"}]},{"triggerid":"41353","groups":[{"groupid":"31"}]},{"triggerid":"33413","groups":[{"groupid":"39"}]},{"triggerid":"33414","groups":[{"groupid":"39"}]},{"triggerid":"41320","groups":[{"groupid":"31"}]},{"triggerid":"41356","groups":[{"groupid":"31"}]},{"triggerid":"33416","groups":[{"groupid":"39"}]},{"triggerid":"33417","groups":[{"groupid":"39"}]},{"triggerid":"41323","groups":[{"groupid":"31"}]},{"triggerid":"41359","groups":[{"groupid":"31"}]},{"triggerid":"33419","groups":[{"groupid":"39"}]},{"triggerid":"33420","groups":[{"groupid":"39"}]},{"triggerid":"41281","groups":[{"groupid":"31"}]},{"triggerid":"41326","groups":[{"groupid":"31"}]},{"triggerid":"41362","groups":[{"groupid":"31"}]},{"triggerid":"33422","groups":[{"groupid":"39"}]},{"triggerid":"33423","groups":[{"groupid":"39"}]},{"triggerid":"36348","groups":[{"groupid":"31"}]},{"triggerid":"41284","groups":[{"groupid":"31"}]},{"triggerid":"41365","groups":[{"groupid":"31"}]},{"triggerid":"42426","groups":[{"groupid":"99"}]},{"triggerid":"42427","groups":[{"groupid":"99"}]},{"triggerid":"36352","groups":[{"groupid":"31"}]},{"triggerid":"41287","groups":[{"groupid":"31"}]},{"triggerid":"41368","groups":[{"groupid":"31"}]},{"triggerid":"33428","groups":[{"groupid":"39"}]},{"triggerid":"33429","groups":[{"groupid":"39"}]},{"triggerid":"41290","groups":[{"groupid":"31"}]},{"triggerid":"41329","groups":[{"groupid":"31"}]},{"triggerid":"41371","groups":[{"groupid":"31"}]},{"triggerid":"33431","groups":[{"groupid":"39"}]},{"triggerid":"33432","groups":[{"groupid":"39"}]},{"triggerid":"41293","groups":[{"groupid":"31"}]},{"triggerid":"41332","groups":[{"groupid":"31"}]},{"triggerid":"41374","groups":[{"groupid":"31"}]},{"triggerid":"42870","groups":[{"groupid":"100"}]},{"triggerid":"17793","groups":[{"groupid":"21"}]},{"triggerid":"33401","groups":[{"groupid":"39"}]},{"triggerid":"33402","groups":[{"groupid":"39"}]},{"triggerid":"40181","groups":[{"groupid":"97"}]},{"triggerid":"42874","groups":[{"groupid":"100"}]},{"triggerid":"40531","groups":[{"groupid":"95"}]},{"triggerid":"41108","groups":[{"groupid":"98"}]},{"triggerid":"41111","groups":[{"groupid":"98"}]},{"triggerid":"41107","groups":[{"groupid":"98"}]},{"triggerid":"41110","groups":[{"groupid":"98"}]},{"triggerid":"43764","groups":[{"groupid":"26"}]},{"triggerid":"38439","groups":[{"groupid":"89"}]},{"triggerid":"38318","groups":[{"groupid":"31"}]},{"triggerid":"38746","groups":[{"groupid":"31"}]},{"triggerid":"43900","groups":[{"groupid":"31"}]},{"triggerid":"43898","groups":[{"groupid":"31"}]},{"triggerid":"44033","groups":[{"groupid":"34"}]},{"triggerid":"43931","groups":[{"groupid":"95"}]},{"triggerid":"43880","groups":[{"groupid":"72"}]},{"triggerid":"43587","groups":[{"groupid":"95"}]},{"triggerid":"43592","groups":[{"groupid":"95"}]},{"triggerid":"43597","groups":[{"groupid":"95"}]},{"triggerid":"43590","groups":[{"groupid":"95"}]},{"triggerid":"43595","groups":[{"groupid":"95"}]},{"triggerid":"43600","groups":[{"groupid":"95"}]},{"triggerid":"43588","groups":[{"groupid":"95"}]},{"triggerid":"43593","groups":[{"groupid":"95"}]},{"triggerid":"43598","groups":[{"groupid":"95"}]},{"triggerid":"43591","groups":[{"groupid":"95"}]},{"triggerid":"43596","groups":[{"groupid":"95"}]},{"triggerid":"43589","groups":[{"groupid":"95"}]},{"triggerid":"43594","groups":[{"groupid":"95"}]},{"triggerid":"43599","groups":[{"groupid":"95"}]},{"triggerid":"43616","groups":[{"groupid":"102"}]},{"triggerid":"43634","groups":[{"groupid":"102"}]},{"triggerid":"43659","groups":[{"groupid":"102"}]},{"triggerid":"43617","groups":[{"groupid":"102"}]},{"triggerid":"43677","groups":[{"groupid":"102"}]},{"triggerid":"43396","groups":[{"groupid":"21"}]},{"triggerid":"40523","groups":[{"groupid":"73"}]},{"triggerid":"39384","groups":[{"groupid":"19"}]},{"triggerid":"40537","groups":[{"groupid":"89"}]},{"triggerid":"43940","groups":[{"groupid":"73"}]},{"triggerid":"17796","groups":[{"groupid":"21"}]},{"triggerid":"43628","groups":[{"groupid":"102"}]},{"triggerid":"43096","groups":[{"groupid":"104"}]},{"triggerid":"43927","groups":[{"groupid":"21"}]},{"triggerid":"40438","groups":[{"groupid":"90"},{"groupid":"73"}]},{"triggerid":"40432","groups":[{"groupid":"99"},{"groupid":"90"}]}],"id":"1"}

我希望计数看起来像这样,[GROUPID] => COUNTOFOCCURENCES

[0] => Array
    (
        [31] => 12
        [39] => 8
        [102] => 6
            (
            )

    )

到目前为止,这是我拼凑起来的,但似乎无法得到任何结果。 任何帮助将不胜感激!

class ProblemService
{
    public function getProblemCountsByGroup( array $triggerCount2 )
    {
        $count = array();
        $uses = array();
        
        foreach( $triggerCount2 as $use ){
            $uses[$use[0]][] = $use[1];
        }
        
        foreach( $uses as $key => $problem ){
            $problem = array_unique($problem);
            $count[$key] = count($problem);
        }
        
        return $count;
    }
}
$service = new ProblemService();
print_r($service->getProblemCountsByGroup($triggerCount2));

你可以递归迭代在使用你的数据RecursiveIteratorIterator与组合RecursiveArrayIterator ,并增加给定的计数,每当关键是groupId

$data = json_decode($json);

$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($data->result));

$counts = [];

foreach ($iterator as $key => $value) {
    if ($key === 'groupid') {
        $counts[$value] = ($counts[$value] ?? 0) + 1;
    }
}

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM