我正在为我的项目创建钻取时间图表。
当前在数据库中,它将钻探持续时间存储为时间字段。 时间以 MM:SS 形式检索,因此 5 分 30 秒表示为 05:30 我选择的绘图包 (jpgraph) 需要将数值作为数组传递给它以进行绘图。
使用下面的代码我得到这个:
数组 ( [0] => 00:03:25 [1] => 00:04:23 [2] => 00:03:48 [3] => 00:02:48 [4] => 00:03:09 [5] => 00:02:25 )
我猜测 00:03:25 是如何存储为字符串的(有什么方法可以确认动态类型吗?)。
我可能需要的是:
A) 以十进制分钟表示:
数组 ( [0] => 3.417 [1] => 4.383 [2] => 3.800 [3] => 2.800 [4] => 3.150 [5] => 2.433 )
B) 表示为整数秒:
数组 ( [0] => 205 [1] => 267 [2] => 228 [3] => 168 [4] => 189 [5] => 145 )
是否有任何现有功能可以执行此操作,或者我是否必须使用正则表达式才能完成类似的操作,因为 PHP idate 函数似乎合适,但似乎只向我返回一个 0 数组(请参见下面的代码)...
当我从 SQL 获取数据时,我使用我创建的以下函数来完成:
public static function queryDB($aSQLQuery,&$aResult,&$aNumResult){
$aResult = mysql_query($aSQLQuery);
$aNumResult = mysql_num_rows($aResult);
}
//Returns User aIDNum's 6 most recents attempts of aExcerNum
public static function getTimes($aIDNum, $aExcerNum, &$aResult,&$aNumResult){
$query = " SELECT * FROM (
SELECT *
FROM Times
WHERE uid = ".$aIDNum." AND
exid = ".$aExcerNum."
ORDER BY Date DESC
LIMIT 6
) AS T1 ORDER BY Date ASC;";
DBHelper::queryDB($query, $aResult, $aNumResult);
}
public static function processTimeData($aResult, $aNumResult, &$aArray){
for( $i=0; $i<$aNumResult; $i++){
$row = mysql_fetch_array($aResult);
$aArray[$i] = DBHelper::txtP($row, 'Date');
}
$paddingData = 6 - $aNumResult;
for ( $j=0; $j < $paddingData; $j++){
$aArray[ ($j+$aNumResult) ] = 0;
}
}
public static function txtP($aRow, $aString){
return htmlspecialchars(stripslashes($aRow[$aString]));
}
像这样使用:
DBHelper::getTimes($userID, $excerciseID, $aResult,$aNumResult);
DBHelper::processTimeData($aResult,$aNumResult,$timeData);
我尝试使用 PHP idate():
public static function processTimeData($aResult, $aNumResult, &$aArray){
for( $i=0; $i<$aNumResult; $i++){
$row = mysql_fetch_array($aResult);
//Tried "i" (Minutes) and "s" (seconds)
$aArray[$i] = iDate("i",$aRow['Time']);
//$aArray[$i] = iDate("s",$aRow['Time']);
}
$paddingData = 6 - $aNumResult;
for ( $j=0; $j < $paddingData; $j++){
$aArray[ ($j+$aNumResult) ] = 0;
}
}
结果:
数组 ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 )
最佳答案
好吧,你可以像这样转换为秒:
// "00:03:25" -> 205
Date("s",strtotime("00:03:25")) + Date("i",strtotime("00:03:25"))*60 + Date("G",strtotime("00:03:25"))*3600;
编辑:在代码中添加了 strtotime()
关于PHP + MySQL : Time as a string into numerics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7089560/