如何用PHP打印JSON值及提取DataPoints三位数计算平均值
PHP处理JSON数据:提取数值、求和与计算平均值
嘿,我来一步步帮你搞定这个PHP处理JSON的需求!咱们从基础操作开始,再逐步实现你的最终目标。
第一步:解析并打印JSON数据
首先你需要把JSON字符串转换成PHP能处理的数组,用json_decode()函数就行,第二个参数传true会把JSON对象转成关联数组,方便后续操作。
// 你的目标JSON字符串 $jsonString = '[ { "MetricName": "payment_cnt.STATE.1s", "Tags": { "environment": "P", "pymtver": "2", "dataset": "tpv" }, "DataPoints": [ [ 1569711341, 236 ], [ 1569711342, 205 ], [ 1569711343, 205 ] ] } ]'; // 将JSON转为PHP关联数组 $phpArray = json_decode($jsonString, true); // 打印整个数据结构,方便你查看内容 echo "完整JSON解析后的结构:\n"; print_r($phpArray);
运行这段代码后,你就能看到JSON转成的PHP数组结构,清楚每个字段的位置。
第二步:提取DataPoints下的三位数数值并计算总和与平均值
接下来咱们要遍历DataPoints字段,提取每个子数组的第二个元素(也就是你的三位数),然后求和、算平均。这里我加了一个验证条件,确保提取的是三位数,让代码更鲁棒——如果你的数据里肯定都是三位数,也可以去掉这个判断。
// 初始化存储变量 $sum = 0; $numberCount = 0; $extractedNumbers = []; // 遍历外层数组(你的JSON是一个数组,包含一个Metric对象) foreach ($phpArray as $metricItem) { // 先检查DataPoints字段是否存在且是数组,避免报错 if (isset($metricItem['DataPoints']) && is_array($metricItem['DataPoints'])) { // 遍历每个DataPoint foreach ($metricItem['DataPoints'] as $point) { // 取子数组的第二个元素(索引为1) $targetValue = $point[1]; // 验证是否为三位数(可选,按需保留) if ($targetValue >= 100 && $targetValue <= 999) { $extractedNumbers[] = $targetValue; $sum += $targetValue; $numberCount++; } } } } // 打印提取的数值 echo "\n提取的三位数数值:" . implode(', ', $extractedNumbers) . "\n"; // 计算并打印总和与平均值 if ($numberCount > 0) { $average = $sum / $numberCount; echo "总和:" . $sum . "\n"; echo "平均值:" . number_format($average, 2) . "\n"; } else { echo "\n没有找到符合要求的三位数数值\n"; }
代码说明:
isset($metricItem['DataPoints']):防止JSON结构变化导致的报错,确保字段存在才继续处理number_format($average, 2):把平均值格式化为两位小数,看起来更清晰- 如果你确定所有
DataPoints的第二个元素都是三位数,可以去掉if ($targetValue >= 100 && $targetValue <= 999)这个判断,直接收集数值就行
内容的提问来源于stack exchange,提问作者Zach
相关产品推荐
相关产品推荐

