我有一个数据库链接到游戏。当游戏插入玩家"游戏时间"它为每个玩家派系添加了这样的内容
游戏时间"[0,0,0]" (COP,MEDIC,CIV)
- 所以0中的每一个都代表每个玩家阵营。
当玩家正在玩那个阵营时,只有1个号码会更新该号码用于该阵营。
示例
playtime "[9012,1221,2663]"
- 所以玩家现在已经玩了
关于CIV的44 Hours and 23 Minutes
和关于MEDIC的20 Hours and 21 Minutes
和关于COP的150 Hours and 12 Minutes
我想要的是在表格中显示每个数字,并在表格中显示每行的时间......
示例
<table>
<tr>
<td>cop</td>
<td>medic</td>
<td>civ</td>
</tr>
<tr>
<td>150 Hours and 12 Minutes</td>
<td>20 Hours and 21 Minutes</td>
<td>44 Hours and 23 Minutes</td>
</tr>
</table>
因此,如果我在上面发布的时间内没有显示,我希望将每个输出显示为小时/分钟,并显示在各自的表格行中。
我目前正在使用此
<td> " . str_replace( array('[',']', '"') , '' ,$row['playtime']). "</td>
仅显示 0,0,2891
等时间如果这没有意义,请告诉我。
答案 0 :(得分:1)
正如您$row['playtime']
格式["nnn,nnn,nnn"]
首先 trim
远方方括号和双引号:
$playtime = trim( $row['playtime'], '"[]' );
然后将字符串拆分为一个数组,其中三个值为 explode
$playtime = explode( ",", $playtime );
使用 gmdate
将秒数转换为H:m:s
$cop = gmdate( "H:i:s", $playtime[0] );
$med = gmdate( "H:i:s", $playtime[1] );
$civ = gmdate( "H:i:s", $playtime[2] );
您每次都会采用hh:mm:ss
你可以继续
$cop = explode( ":", $cop );
$cop = "{$cop[0]} Hours and {$cop[1]} Minutes";
等等。
答案 1 :(得分:0)
这很简单,但你应该展示你的尝试。 实现它的一种方法如下(非常香草的PHP):
$values = "9012,1221,2663";
$minutes = explode(',', $values);
foreach ($minutes as $item) {
$hours = round(intval($item)/60);
$minonly = gmp_div_r(intval($item),60);
echo '<td>' . $hours . ' and ' . $minonly . ' minutes</td>' . PHP_EOL;
}
答案 2 :(得分:0)
您可以使用DateTime::createFromFormat()
创建DateTime
对象,并使用DateInterval
创建的diff()
格式化字符串:
// $row['playtime'] = '"[9012,1221,2663]"';
// here $row['playtime'] come from your data source
$times = explode(',', trim($row['playtime'], '[]"'));
$times = array_map(function($t) {
$d1 = DateTime::createFromFormat("U", 0);
$d2 = DateTime::createFromFormat("U", $t * 60);
$diff = $d1->diff($d2);
return ($diff->d * 24 + $diff->h) . " hours, " . $diff->i . " minutes" ;
}, $times);
print_r($times);
输出:
Array
(
[0] => 150 hours, 12 minutes
[1] => 20 hours, 21 minutes
[2] => 44 hours, 23 minutes
)