1

I have JSON query that returns some values. Inside this response there is a subarray called "groups", within that nested group are numerous "groupid". I simply need a way to count these and place the results into an array.

The JSON response looks like this...

{"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"}

I would like the counts to look like this, [GROUPID] => COUNTOFOCCURENCES

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

    )

So far this is what I have pieced together, but cannot seem to get any result. Any help would be greatly appreciated!

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

1 Answer 1

2

You could recursively iterate over your data using a RecursiveIteratorIterator combined with a RecursiveArrayIterator, and increment the given count whenever the key is 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;
    }
}

Demo

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.