我有一个以秒为单位的列,我需要在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;
}
?>
答案 0 :(得分: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得到分钟组件,然后将余数连接到它。
如果您需要定期获取此数据(即您将要执行此查询),最好将此计算字段实际存储在记录中,这样您就不需要进行计算了。查询数据。只需对每个记录插页进行计算。
答案 1 :(得分: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
}
答案 2 :(得分: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在his answer中指定的那样。