php - 使用 PHP 计算 JSON 值
问题描述
我有一个 JSON,我想计算多少次id_pieasa
以相同的值出现,多少次garantie_piesa
是真或假,这也是
我拥有的 JSONid_piesa
的总和:cantitate_piesa
[
[
{
"id_piesa":"7",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"18",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"313",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"312",
"cantitate_piesa":1,
"garantie_piesa":false
}
],
[
{
"id_piesa":"68",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"44",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"168",
"cantitate_piesa":1,
"garantie_piesa":true
},
{
"id_piesa":"444",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"91",
"cantitate_piesa":1,
"garantie_piesa":false
}
],
[
{
"id_piesa":"168",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"44",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"308",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"1",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"27",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"26",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"65",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"74",
"cantitate_piesa":1,
"garantie_piesa":true
}
],
[
{
"id_piesa":"82",
"cantitate_piesa":1,
"garantie_piesa":false
}
],
[
{
"id_piesa":"120",
"cantitate_piesa":1,
"garantie_piesa":false
}
],
[
{
"id_piesa":"120",
"cantitate_piesa":1,
"garantie_piesa":true
}
],
[
{
"id_piesa":"71",
"cantitate_piesa":1,
"garantie_piesa":false
}
],
[
{
"id_piesa":"168",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"44",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"91",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"444",
"cantitate_piesa":1,
"garantie_piesa":false
}
]
]
例如:id_piesa 168 出现 2 次总和 cantitate_piesa 为 2 且 1 次为真 1 次为假
解决方案
首先我使用 json formater 来获取一个有效的 json 数组https://jsonformatter.curiousconcept.com/然后你可以试试这个:
//decode json array We receive multidimensional array
$t = json_decode('[
[
{
"id_piesa":"7",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"18",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"313",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"312",
"cantitate_piesa":1,
"garantie_piesa":false
}
],
[
{
"id_piesa":"68",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"44",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"168",
"cantitate_piesa":1,
"garantie_piesa":true
},
{
"id_piesa":"444",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"91",
"cantitate_piesa":1,
"garantie_piesa":false
}
],
[
{
"id_piesa":"168",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"44",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"308",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"1",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"27",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"26",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"65",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"74",
"cantitate_piesa":1,
"garantie_piesa":true
}
],
[
{
"id_piesa":"82",
"cantitate_piesa":1,
"garantie_piesa":false
}
],
[
{
"id_piesa":"120",
"cantitate_piesa":1,
"garantie_piesa":false
}
],
[
{
"id_piesa":"120",
"cantitate_piesa":1,
"garantie_piesa":true
}
],
[
{
"id_piesa":"71",
"cantitate_piesa":1,
"garantie_piesa":false
}
],
[
{
"id_piesa":"168",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"44",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"91",
"cantitate_piesa":1,
"garantie_piesa":false
},
{
"id_piesa":"444",
"cantitate_piesa":1,
"garantie_piesa":false
}
]
]',true);
//This will be our new array with statistic data
$newArr = [];
//Looping arrays
foreach($t as $s) {
foreach($s as $arr) {
// We'll use id_piesa for keys in our $newArr, here we check if record
// with this key exists in the new array
if(!array_key_exists($arr['id_piesa'], $newArr))
{
// if not create new record and assign cantitate_piesa
$newArr[$arr['id_piesa']] = [
'id' => $arr['id_piesa'],
'cantitate_piesa_sum' => (int)$arr['cantitate_piesa']
];
// check if garantie_piesa is TRUE or FALSE and count that
// for this record
if($arr['garantie_piesa'] == true) {
$newArr[$arr['id_piesa']]['countTrue'] = 1;
} else {
$newArr[$arr['id_piesa']]['countFalse'] = 1;
}
} else {
// record exists so just add to it cantitate_piesa
// from array being looped
$newArr[$arr['id_piesa']]['cantitate_piesa_sum'] =
$newArr[$arr['id_piesa']]['cantitate_piesa_sum'] + (int)$arr['cantitate_piesa'];
// again check if garantie_piesa is TRUE or FALSE and count that
// for this record
if($arr['garantie_piesa'] == true) {
$newArr[$arr['id_piesa']]['countTrue'] = $newArr[$arr['id_piesa']]['countTrue']+1;
} else {
$newArr[$arr['id_piesa']]['countFalse'] = $newArr[$arr['id_piesa']]['countFalse']+1;
}
}
}
}
echo "<pre>";
var_dump($newArr);
echo "</pre>";
推荐阅读
- c - CPU 使用率 C Packed struct vs Unsigned Long Long 操作
- vb.net - 从 MySQL 创建的数据表中将日期添加到 datagridview 作为 dd-MM-yyyy
- request - 在 PDP 端搜索 xacml 策略的最佳实践?
- c# - 构造函数中具有参数的 autfac 注入服务
- docker - 如何在带有单声道的 Docker 容器中安装 MS Office?
- c# - 访问字典
- python - 具有总和编辑轴限制的堆叠条形图 - python
- laravel - 使用 Laravel/VueJS 向 CKEditor 5 添加字体选项
- spring - 如何在 JobExecutionListener 中自动装配服务?
- swift - 为什么我的 swift 应用程序在 AVAsset 中“泄漏”内存