0

日数の差に応じて「ボーグ」の量を計算する次のコードがあります。変数をエコーアウトして$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;
}
4

4 に答える 4

1

対応するものが評価されない限り、最後elseは常に$borg0に設定されるためです。if

$borg = 0;解決策は、すべてのifステートメントの前に定義し、ステートメントを削除するelseことです。

 $borg = 0;
 if( ... )
 {
 }
 ...
于 2012-07-16T22:56:33.073 に答える
1

私はあなたが何を計算しているのか本当に理解していませんでしたが、なぜあなたが常にボルグに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;
}

このように、$ borg = 0コードは、すべてのステートメントがfalseの場合にのみ実行されます。

于 2012-07-16T22:57:28.877 に答える
1

elseifを使用する必要があります。それぞれのif計算を実行してから、if/else状態で終了します。結果は、$borgが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

于 2012-07-16T22:58:21.003 に答える
1

最後の2つの条件付きブロックが、この特定の問題の原因です。

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

1つ目は、負の$days28より大きくの35より小さい場合に、同時に適用されます。これは不可能であるため、else常に適用され、$borg常にゼロになります。他のすべてのifステートメントは、これらの最後の2つにリンクされていないため、常に評価されます。あなたの他の少なくとも3人は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;
}
于 2012-07-16T22:58:27.300 に答える