2012-08-07 28 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'); 
    }