-1

スコア$scoreに応じて変数の値を変更しようとしています。$total_votesコードは ( I のときecho $score) 関数を実行するたびに値 1 を生成します。が正しく機能していないと思わせてしまいますが、$score = $score+1見落としているコードの構造はありますか?

public function score($datediff,$total_votes){
    $score = 0;
    if ($total_votes < 10)                            { $score = $score+1;}
    if ($total_votes > 10 && $total_votes < 100 )     { $score = $score+1;}
    if ($total_votes > 100 && $total_votes < 1000 )   { $score = $score+1;}
    if ($total_votes > 1000 && $total_votes < 10000 ) { $score = $score+1;}

    echo $score.' ';
}
4

7 に答える 7

3

注:この回答を参照する前に、コメントをお読みください

あなたが私のコメントに答えたものに関しては、私が得たものはあなたがこのように合計したいということです。

public function score($datediff,$total_votes){
            $score = 0;
            if ($total_votes < 10)                              { $score = $score+1;}
            if ($total_votes > 10 && $total_votes < 100 )       { $score = $score+2;}
            if ($total_votes > 100 && $total_votes < 1000 )     { $score = $score+3;}
            if ($total_votes > 1000 && $total_votes < 10000 )   { $score = $score+4;}

            echo $score.' ';
            }

変数に追加する値を変更する必要があります$score

たとえば、総投票数が1500で、最後の条件を除いてどの条件も満たさない場合、条件が満たされないため、各条件に追加しようとしている+1は実行されず、phpは他にスキップし、最後に追加します。$score最後の条件での値。したがって$score、が1000より大きく10000未満の場合は、最後の条件で変数に+4を追加するよりも、+4を追加する必要があります$total_votes$score

于 2012-10-01T05:33:25.097 に答える
2

あなたの条件は相互に排他的です。あなたは持つことができません

$total_votes < 10

同時に

$total_votes > 10 && $total_votes < 100

変数は同時に < 10 と > 10 になることはできないためです。したがって、$score を複数回インクリメントすることはできません。あなたが探しているのはおそらく

public function score($datediff,$total_votes){
    $score = 1;

    if ($total_votes > 10)
        $score++;
    if ($total_votes > 100)
        $score++;
    if ($total_votes > 1000)
        $score++;
    if ($total_votes > 10000)
        $score++;
}

関数は実際には対数の底 10 の大まかなバージョンを計算することに注意してください。

$score = floor(log10($total_votes))
于 2012-10-01T05:25:41.253 に答える
1

あなたのif発言は相互に排他的です。1 つの条件が true の場合、outhers は false です。

于 2012-10-01T05:21:56.397 に答える
0

STATICキーワードを使用してみてください。

public function score($datediff,$total_votes){
            static $score = 0;
            if ($total_votes < 10)                              { $score = $score+1;}
            if ($total_votes > 10 && $total_votes < 100 )       { $score = $score+1;}
            if ($total_votes > 100 && $total_votes < 1000 )     { $score = $score+1;}
            if ($total_votes > 1000 && $total_votes < 10000 )   { $score = $score+1;}

            echo $score.' ';
            }

$score関数の最初の呼び出しでのみ初期化されます。

Variable Scopeも見てください。

于 2012-10-01T05:22:52.440 に答える
0
public function score($total_votes){
    $score = 0;

    if ($total_votes < 10)     { $score = $score+1;}
    if ($total_votes < 100 )   { $score = $score+1;}
    if ($total_votes < 1000 )  { $score = $score+1;}
    if ($total_votes < 10000 ) { $score = $score+1;}

    echo $score.' ';
}

$datediff無関係です。

于 2012-10-01T05:38:14.580 に答える
-1

まず、変数$scoreはグローバルまたはセッション中のいずれかである必要があります。

次に、else ifステートメントを使用して、1つの条件のみになるようにする必要があります。

コーディングに従って、この関数を呼び出すたびに$ score = 0に設定するので、関数の外部で定義し、値を変更して答えを確認してください

注:関数でこれをリセットしないでください

于 2012-10-01T05:31:01.880 に答える
-1
public function score($datediff,$total_votes){
    $score = 0;
    if ($total_votes > 0)       { $score = $score+1;}
    if ($total_votes > 10)      { $score = $score+1;}
    if ($total_votes > 100)     { $score = $score+1;}
    if ($total_votes > 1000 && $total_votes <= 10000 ){
        $score = $score+1;
    }

    echo $score.' ';
}
于 2012-10-01T05:54:23.787 に答える