0

我有一个以秒为单位的列,我需要在 Minutes:seconds 中对其进行格式化,我想我需要遍历获取的数组,但不太确定如何去做。

$query = 'SELECT calldate,recordingfile,uniqueid,clid,did,lastapp,dst,disposition,duration FROM cdr'; 
$sql = $remotedbh->prepare($query);  
$sql->execute(); 
$dblist = $sql->fetchAll(PDO::FETCH_ASSOC); 

while($row -)


if($sql->rowCount() > 0){ 
    header('Content-type: application/json');
    echo json_encode($dblist); 
} 
else {
    echo 0; 
}     

?>
4

3 回答 3

3

我建议更改查询本身的值。这是一个例子

SELECT calldate,
recordingfile,
uniqueid,
clid,
did,
lastapp,
dst,
disposition,
duration,
CONCAT(FLOOR(duration/60),':',LPAD((duration % 60), 2, '0')) AS duration_in_mins_and_secs
FROM cdr

在这里,我假设持续时间是您要修改的字段。我只是将持续时间除以 60 以获得分钟分量,然后将余数连接到它。

如果您经常需要此数据(即您将经常执行此查询),最好将这个计算字段实际存储在记录本身中,这样您在查询数据时根本不需要进行计算. 只需在每次插入记录时进行此计算。

于 2013-09-17T20:24:53.503 回答
0

我建议一次提取一行,而不是将它们全部提取到一个数组中:

while ($dbrow = $sql->fetch(PDO::FETCH_ASSOC)) {
   // process current row
}

如果您希望将它们全部提取到一个数组中,您可以使用 PHP 的foreach

$dblist = $sql->fetchAll(PDO::FETCH_ASSOC); 

foreach ($dblist as $dbrow) {
  // process current row
}
于 2013-09-17T20:18:45.160 回答
0

以下代码将以格式格式化持续时间M:S

while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
    $dur = $row["duration"];
    $min = $sec = 0;
    if (floor($dur / 60) > 0) {
        $min = floor($dur / 60);
        $sec = $dur % 60;
    }
    else {
        $sec = $dur;
    }
    $str = $min . ":" . $sec;
}

但是,我建议让您的数据库为您格式化输出,正如 Mike Brant 在他的回答中指定的那样。

于 2013-09-17T20:27:51.757 回答