我有带浮点值的MySQL,它是压力参数。我需要计算平均值。但是我制作的代码在我的json响应中返回平均“空”。
这是我得到的json响应:
/td[2]/a
如图所示。 avg给空!。
这是PHP中的代码
{"result":{"pressure":{"min":[{"Id":"2","presion":"0","Insertado":"2016-08-16 16:20:08"},{"Id":"5","presion":"0","Insertado":"2016-08-16 18:09:04"}],"max":[{"Id":"3","presion":"55","Insertado":"2016-08-16 16:22:14"}],"avg":[]},"last_entry":{"Id":"8","presion":"50","Insertado":"2016-08-16 18:28:45"}}}
然后
$press_values = get_press_values($json_object->result);
// get pressure result set with respected values
$press_result = get_press_result_set_from_values($json_object->result,$press_values);
// get latest entry
$latest_entry = get_latest_date_entry($json_object->result);
// Wrap results in an array
$output_result = array(
'pressure' => $press_result,
'last_entry' => $latest_entry
);
}
}
然后:
function get_press_values($result){
$min = -1;
$max = -1;
$avg = -1;
// get all pressure values
$pressures = array_map(function($result_item) {
return intval($result_item->presion);
}, $result);
if($pressures){
$min = min($pressures);
$max = max($pressures);
$avg = intval(calculate_average($pressures));
}
return array(
'min' => $min,
'max' => $max,
'avg' => $avg
);
} 然后:
function get_press_result_set_from_values($array,$value){
$min_objs = array();
$max_objs = array();
$avg_objs = array();
foreach ($array as $item) {
if($item->presion == $value['min']){
$min_objs[] = $item;
}
if($item->presion == $value['max']){
$max_objs[] = $item;
}
if($item->presion == $value['avg']){
$avg_objs[] = $item;
}
}
return array(
'min' => $min_objs,
'max' => $max_objs,
'avg' => $avg_objs,
);
}
答案 0 :(得分:0)
您的代码中的这一部分:
if($item->presion == $value['avg']){
$avg_objs[] = $item;
}
如果presion
与平均值完全匹配,只会添加一个项目,这可能非常不可能,具体取决于您的数据。
更新:例如,您的值为50,51,54,55。平均值为53.您的代码将找不到任何等于53的$item->presion
,因为平均值不需要具有该值的项目(与最小值和最大值相反)。
你应该检查你是否真正意味着中位数(必须以不同的方式确定......)。
update2 :要获得结果的平均值,您必须更改
$avg_objs = array();
到$avg_objs = $value['avg'];
。并从我上面发布的代码中删除该部分。
此外,如果您希望平均值不是整数,则应更改行
$average = ($total/$count);
到
$average = (float)$total / $count;
并从以下位置删除intval
:
$avg = intval(calculate_average($pressures));