2012-07-16 31 views
0

我有以下代碼,它根據天數的差異來計算'borg'的數量。我回應了我的$days變量來檢查差異是多少天。據此,我在某一天的差異是38天。當我回顯$borg時,怎麼會這樣,它仍然顯示0的數量?在這個例子中,$days = 38日期之間的差異計算不起作用

$vandaag = date($format, strtotime('today')); 
$verschil = $interval->d; 
$diff = strtotime($retourdatum) - strtotime($vandaag); 

$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24)); 
echo $days; 
if($days > 0) 
{ 
    $borg = 80; 
} 
if($days<0 && $days>-7) 
{ 
    $borg = 65; 
} 
if($days>-7 && $days<-14) 
{ 
    $borg = 50; 
} 
if($days>-14 && $days<-21) 
{ 
    $borg = 35; 
} 
if($days>-21 && $days<-28) 
{ 
    $borg = 20; 
} 
if($days>-28 && $days<-35) 
{ 
    $borg = 5; 
} 
else 
{ 
    $borg = 0; 
} 

回答

1

你的最後兩個條件塊此特定問題的原因:

if($days>-28 && $days<-35) 
{ 
    $borg = 5; 
} 
else 
{ 
    $borg = 0; 
} 

第一個適用於任何$days比負更大的28 低於負35,同時 。這是不可能的,所以else總是適用,並且$borg始終爲零。您的所有其他if聲明都不以任何方式鏈接到這兩個聲明,因此始終對它們進行評估。至少有三個其他if也有同樣的問題:他們設置了一個不可能實現的條件。

認爲這是你想要做什麼:有$borg該變小爲$days負得越多的值。如果你使用else if條件,你不必再重複,每次扭轉以前的狀態,這是更容易看到你在做什麼(有益的時候,說,你不小心翻轉<>):

$borg = 0; 

if($days > 0) 
{ 
    $borg = 80; 
} 
else if ($days > -7) 
{ 
    $borg = 65; 
} 
else if ($days > -14) 
{ 
    $borg = 50; 
} 
else if ($days > -21) 
{ 
    $borg = 35; 
} 
else if ($days > -28) 
{ 
    $borg = 20; 
} 
else if ($days > -35) 
{ 
    $borg = 5; 
} 
1

因爲你最後else將始終設置$borg爲0,除非其相應的if評價。

解決的辦法是在您的所有if語句之前定義$borg = 0;,並擺脫else語句。

$borg = 0; 
if(...) 
{ 
} 
... 
+0

我真的那麼愚蠢..?謝謝!被困在它上面像兩個小時:( – Andre 2012-07-16 22:57:55

1

我真的不明白你在計算什麼,但我清楚地知道你爲什麼總是在borg中有0。

下面的代碼應該可以解決你的問題:

$vandaag = date($format, strtotime('today')); 
$verschil = $interval->d; 
$diff = strtotime($retourdatum) - strtotime($vandaag); 
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24)); 
echo $days; 
if($days > 0) 
{ 
    $borg = 80; 
} 
elseif($days<0 && $days>-7) 
{ 
    $borg = 65; 
} 
elseif($days>-7 && $days<-14) 
{ 
    $borg = 50; 
} 
elseif($days>-14 && $days<-21) 
{ 
    $borg = 35; 
} 
elseif($days>-21 && $days<-28) 
{ 
    $borg = 20; 
} 
elseif($days>-28 && $days<-35) 
{ 
    $borg = 5; 
} 
else 
{ 
    $borg = 0; 
} 

這樣,$博格= 0的代碼纔會執行​​,如果所有的聲明均屬不實。

1

你應該使用elseif。如果計算每個都做,然後用if/else狀態結束。其結果是$博格可以是5或0

if($days > 0) 
    $borg = 80; 
elseif($days<0 && $days>-7) 
    $borg = 65; 
elseif($days>-7 && $days<-14) 
    $borg = 50; 
elseif($days>-14 && $days<-21) 
    $borg = 35; 
elseif($days>-21 && $days<-28) 
    $borg = 20; 
elseif($days>-28 && $days<-35) 
    $borg = 5; 
else 
    $borg = 0; 

閱讀文檔在這裏:elseif