计算平均返回“0”PHP

时间:2016-08-17 12:08:48

标签: php json

我有带浮点值的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,
);

}

1 个答案:

答案 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));