为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 PHP 中的更多 mySQL 行中获取平均值?

如何从 PHP 中的更多 mySQL 行中获取平均值?

PHP
陪伴而非守候 2021-09-18 16:43:54
我不懂任何 PHP,但我需要一个 API。我的朋友做了一个,但我需要平均时间戳(当然,如果查询发现不止一行)。从我的 mysql 数据库中,我以字符串形式获得时间戳 (00:34:51)。我想我知道该怎么做,但是我在 PHP 方面太无能了,以至于我无法自己修复它。这是网络 API<?php// import connectrequire_once '../db_connect.php';// api input$name = $_POST['name'];$country = $_POST['country'];$race = $_POST['race_type'];$return = [];// execute query$stmt = $conn->prepare("SELECT Swim,Bike,Run,Overall FROM test WHERE Name = ? AND Country = ? AND Race = ?");$stmt->bind_param("sss", $name, $country, $race);$stmt->execute();$result = $stmt->get_result();// search in datawhile ($row = $result->fetch_assoc()) {    if ($row['Swim'] < $row['Bike'] && $row['Swim'] < $row['Run']) {        $best = $row['Swim'];    } else if ($row['Bike'] < $row['Swim'] && $row['Bike'] < $row['Run']) {        $best = $row['Bike'];    } else {        $best = $row['Run'];    }    array_push($return, [        'swim' => $row['Swim'],        'bike' => $row['Bike'],        'run' => $row['Run'],        'overall' => $row['Overall'],        'best' => $best    ]);}// return dataecho json_encode($return);$stmt->close();$conn->close();die();这就是 mySQL 数据库中一行的样子ID  Race    RaceDate    Name    Country Div Rank    Gender Rank Overall Rank    Swim    Bike    Run Finish1   70.3 Pula   20170917    Stefan Haubner  DEU 1   1   1   0:00:34 2:23:03 1:20:33 3:46:33
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

据我所知,时间戳以小时:分钟:秒的格式存储。要找到四个时间戳(游泳、自行车、跑步、总体)中的最小值,您需要首先将每个时间戳转换为秒。以下代码可用于获取四个时间戳的最佳时间:


function GetTimeInSec($time) {

    list($hour, $min, $sec) = explode(":", $time);

    $hour                   = (int) ltrim($hour, "0");

    $min                    = (int) ltrim($min, "0");

    $sec                    = (int) ltrim($sec, "0");

    $new_time               = (($hour * 3600) + ($min * 60) + ($sec));


    return $new_time;

}


function GetBestTime($t1, $t2, $t3, $t4) {

    $time_arr   = array(

                      GetTimeInSec($t1) => $t1, 

                      GetTimeInSec($t2) => $t2,

                      GetTimeInSec($t3) => $t3,

                      GetTimeInSec($t4) => $t4

                  );

    ksort($time_arr);

    $time_cols  = array_keys($time_arr);

    $best_time  = $time_cols[0];                


    return $best_time;

}


$time_data = GetBestTime($row['Swim'], $row['Bike'], $row['Run'], $row['Overall']);


$best_time = $time_data["best_time"];

$avg_time  = $time_data["avg_time"];

自行车、跑步和游泳的平均时间可以通过首先将每个值从 VARCHAR 转换为 INT 格式的秒数来计算。之后,array_sum 函数可用于查找游泳、自行车和跑步的总和。然后将总和除以总行数以获得平均值。可以使用以下代码:


function GetAverageTimes($data) {

    $data_new        = array("swim" => array(), "bike" => array(), "run" => array());

    for ($count = 0; $count < count($data); $count++) {

        $row       = $data[$count];

        array_push($data_new['swim'], GetTimeInSec($row['swim']));

        array_push($data_new['bike'], GetTimeInSec($row['bike']));

        array_push($data_new['run'], GetTimeInSec($row['run']));                        

    }


    $averages         = array("swim" => 0, "bike" => 0, "run" => 0);

    $averages['swim'] = ceil(array_sum($data_new['swim']) / count($data));

    $averages['bike'] = ceil(array_sum($data_new['bike']) / count($data));        

    $averages['run']  = ceil(array_sum($data_new['run']) / count($data));


    return $averages;

}


$average_times = GetAverageTimes($return);


查看完整回答
反对 回复 2021-09-18
  • 1 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信