Reputation: 13
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));
Upvotes: 1
Views: 156
Reputation: 14927
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;
}
}
Upvotes: 2