2012-08-07 29 views
1

我有一个游戏和小时从一个XML抓到一个foreach列表。他们将时间格式设置为1.8小时,而不是1小时48分钟。坚持用简单的PHP公式

除了最后的elseif之外,下面的代码中的所有内容都正常工作。它应该抓住超过6分钟但不到60分钟的比赛,将其转换,然后在最后加上“分钟”。

现在,它仅对所有这些游戏显示“0分钟”。

$hoursplayed = $game->hoursOnRecord; 
     if ($hoursplayed < .1) { 
     $zeros = $zeros + 1; 
     $hoursplayed = 0;}   
     elseif ($hoursplayed >= 1){ 
     $nonzeros = $nonzeros + 1; 
     } 
     elseif ($hoursplayed >= .1 && $hoursplayed < 1) { 
     $hoursplayed = ($hoursplayed * 60) . " minutes"; 
     } 
+1

你没有任何打印 – Don 2012-08-07 15:36:46

+1

如果你的前两个条件已经检查游戏不到6分钟,一小时或以上,你不需要有最后elseif,只是别的。它应该运行相同,但我认为它使代码更易于阅读。 – andrewsi 2012-08-07 15:41:11

+0

如果我使用'$ hoursplayed = 0.3'来尝试该代码段并使用'echo'打印,则会按预期显示“18分钟”。我认为你的bug是在设置'$ game - > $ hoursOnRecord'的代码中。 – 2012-08-07 15:41:37

回答

1

对不起,但它运行良好!
Working demo here

试试这个:

$hoursplayed = (float) $game->hoursOnRecord; 
+0

很奇怪。它必须是页面上的其他内容。感谢您的帮助 – user1568736 2012-08-07 15:47:12

1

你的代码是相当麻烦的;这是我怎么会写:

<?php 
$hours_float = $game -> hoursOnRecord; 
$hours = floor($hours_float); 
$minutes = round(($hours_float - $hours) * 60); 
if (($hours > 0 || $minutes > 6) && $hours < 1) 
    { 
    echo $hours . ' hour' . ($hours === 1 ? '' : 's') . ' ' . $minutes . ' minute' . ($minutes === 1 ? '' : 's'); 
    }