机械的增删改查做多了,脑子都转不动了,
今天遇到一个需要运用算法的问题,愣是研究了半天,特此记录:
下面开始我的表演:
根据一下数组中create_time字段求每天各个字段平均值
数组数据源如下:
$data=array(43) {
[0] => array(8) {
["id"] => int(6)
["PM1"] => float(1)
["PM25"] => float(2)
["PM10"] => float(3)
["humidity"] => float(4)
["temperature"] => float(5)
["lid"] => int(1)
["create_time"] => string(10) "2018-01-29"
}
[1] => array(8) {
["id"] => int(7)
["PM1"] => float(1.1)
["PM25"] => float(2)
["PM10"] => float(3.3)
["humidity"] => float(4.5)
["temperature"] => float(5.8)
["lid"] => int(1)
["create_time"] => string(10) "2018-01-29"
}
[2] => array(8) {
["id"] => int(8)
["PM1"] => float(11)
["PM25"] => float(22)
["PM10"] => float(33)
["humidity"] => float(44)
["temperature"] => float(55)
["lid"] => int(1)
["create_time"] => string(10) "2018-02-01"
}
[3] => array(8) {
["id"] => int(9)
["PM1"] => float(11)
["PM25"] => float(22)
["PM10"] => float(33)
["humidity"] => float(44)
["temperature"] => float(55)
["lid"] => int(1)
["create_time"] => string(10) "2018-02-01"
}
[4] => array(8) {
["id"] => int(10)
["PM1"] => float(17)
["PM25"] => float(21)
["PM10"] => float(23)
["humidity"] => float(114)
["temperature"] => float(252)
["lid"] => int(1)
["create_time"] => string(10) "2018-02-02"
}
[5] => array(8) {
["id"] => int(11)
["PM1"] => float(17)
["PM25"] => float(21)
["PM10"] => float(23)
["humidity"] => float(114)
["temperature"] => float(252)
["lid"] => int(1)
["create_time"] => string(10) "2018-02-03"
}
[6] => array(8) {
["id"] => int(23)
["PM1"] => float(15)
["PM25"] => float(19)
["PM10"] => float(21)
["humidity"] => float(129)
["temperature"] => float(252)
["lid"] => int(1)
["create_time"] => string(10) "2018-02-03"
}
[7] => array(8) {
["id"] => int(24)
["PM1"] => float(15)
["PM25"] => float(19)
["PM10"] => float(21)
["humidity"] => float(124)
["temperature"] => float(252)
["lid"] => int(1)
["create_time"] => string(10) "2018-02-03"
}
[8] => array(8) {
["id"] => int(25)
["PM1"] => float(15)
["PM25"] => float(19)
["PM10"] => float(21)
["humidity"] => float(121)
["temperature"] => float(252)
["lid"] => int(1)
["create_time"] => string(10) "2018-02-04"
}
[9] => array(8) {
["id"] => int(26)
["PM1"] => float(15)
["PM25"] => float(19)
["PM10"] => float(21)
["humidity"] => float(120)
["temperature"] => float(252)
["lid"] => int(1)
["create_time"] => string(10) "2018-02-04"
}
[10] => array(8) {
["id"] => int(27)
["PM1"] => float(15)
["PM25"] => float(19)
["PM10"] => float(21)
["humidity"] => float(119)
["temperature"] => float(253)
["lid"] => int(1)
["create_time"] => string(10) "2018-02-04"
}
}
首先把数组按create_time分组
public function group()
{
$flag = $data[0]['create_time'];
$new[$flag][] = $data[0];
$len = count($data);
for ($i=1;$i< $len; $i++){
if ( $data[$i]['create_time'] == $flag ){
$new[$flag][]= $data[$i];
}else{
$flag = $data[$i]['create_time'];
$new[$flag][] = $data[$i];
}
}
$data = self::getAvgData($new);
}
下一步,对每天的数据求平均值:
protected static function getAvgData($new)
{
if (!is_array($new)){
exit();
}
foreach ($new as $key => $value){
$flag = $value[0];
for ( $i = 1; $i < count($value); $i++ ){
$flag['PM1'] = $flag['PM1'] + $value[$i]['PM1'];
$flag['PM25'] = $flag['PM25'] + $value[$i]['PM25'];
$flag['PM10'] = $flag['PM10'] + $value[$i]['PM10'];
$flag['temperature'] =$flag['temperature'] + $value[$i]['temperature'];
$flag['lid'] =$flag['lid'] + $value[$i]['lid'];
}
array_shift($flag);
foreach ($flag as $k => $v){
$flag[$k] = $v / count($value);
}
$rest[$key] = $flag;
}
//return $rest;
print_r($rest);
}
大功告成:
array(3) {
["2018-01-29"] => array(7) {
["PM1"] => float(1.05)
["PM25"] => float(2)
["PM10"] => float(3.15)
["humidity"] => float(2)
["temperature"] => float(5.4)
["lid"] => int(1)
["create_time"] => int(1009)
}
["2018-02-02"] => array(7) {
["PM1"] => float(15.466666666667)
["PM25"] => float(20.4)
["PM10"] => float(23.6)
["humidity"] => float(2.9333333333333)
["temperature"] => float(225.6)
["lid"] => int(1)
["create_time"] => float(134.53333333333)
}
["2018-02-03"] => array(7) {
["PM1"] => float(15)
["PM25"] => float(19)
["PM10"] => float(21)
["humidity"] => float(4.9615384615385)
["temperature"] => float(252.53846153846)
["lid"] => int(1)
["create_time"] => float(77.615384615385)
}
}
网友评论