如何在同一个函数中多次更改变量的值?

时间:2012-10-01 05:18:43

标签: php

我正在尝试根据$score分数更改变量$total_votes的值。现在代码(当我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.' ';
}

7 个答案:

答案 0 :(得分: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 &gt; 1000 $total_votes >和&lt; 10000 比在最后一个条件

中将+4添加到$score变量

答案 1 :(得分:2)

您的条件是互相排斥的。你不能拥有

$total_votes < 10

并且同时

$total_votes > 10 && $total_votes < 100

因为变量不能&lt; 10和&gt; 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))

答案 2 :(得分:1)

您的if声明是互斥的。当一个条件成立时,外部是错误的。

答案 3 :(得分: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

答案 4 :(得分: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无关紧要。

答案 5 :(得分:-1)

首先,您的变量$得分必须是全局的或在会话中。

其次你应该使用else if语句,以便它只进入一个条件。

根据您的编码,每次此函数调用时都设置$ score = 0,因此在函数外部定义它并更改值并查看答案

注意:请勿在函数

中重置此项

答案 6 :(得分:-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.' ';
}