根据条件php更改变量值

时间:2013-06-27 14:36:41

标签: php conditional-statements

我有一个应该根据某些条件改变的类名,但我的语法或逻辑似乎不正确,因为它不起作用:

if ( $hometeam && ($homescore > $awayscore) || $awayteam && ($awayscore > $homescore)){
                        $status= 'win'; 
                    }                       
if ( $hometeam && ($homescore < $awayscore) || $awayteam && ($awayscore < $homescore)) {
                        $status= 'lose';
                    }                       
if ($homescore == $awayscore) {
                        $status= 'draw';
                    }

我的每个元素都有class="<?php echo $status; ?>",我希望它们的样式取决于$status的值。我没有使用else if,因为我不希望它应用值并停止,但看起来就是这样。

编辑:一些澄清:

<ul class="match group">    
                <li>
                    <ul class="team1 <?php echo $status; ?>">
                        <li class="teamname"><h2><?php echo $homename; ?></h2></li>  
                        <li class="teamscore"><?php echo $homescore; ?></li>
                    </ul>
                </li>
                <li>
                    <ul class="team2 <?php echo $status; ?>">
                        <li class="teamname"><h2><?php echo $awayname?></h2></li>    
                        <li class="teamscore"><?php echo $awayscore?></li>                              
                    </ul>
                </li>
                <li><ul class="matchinfo">
                        <li><a href="reports.html#report4"><button>Get Report</button></a></li>
                    </ul>
                </li>
</ul>

3 个答案:

答案 0 :(得分:2)

根据您的逻辑,$status的价值只有两种可能的结果:'lose''draw'

这是为什么?基本逻辑说,除非有平局,否则游戏总是会有胜利者。您的if语句与此对齐。 $homescore > $awayscore$homescore < $awayscore(或者有平局)。因此,如果出现非平局,则您的第一个if的一侧将评估为true,因此整个条件将为true,因为||只需要一个真实。因此,除非有平局,否则$status将设置为'win'

继续前进,基本逻辑也会告诉我们,除非有平局,否则游戏总是会失败。同样,您的代码符合这一点。如果没有平局,其中一个得分将低于另一个,因此你的第二个如果将评估为true,就像第一个那样。现在$status = 'lose'

现在如果有平局,$status将等于'draw',否则$status将始终为'lose',因为如果游戏中有胜利者,那么它也有将失败者$status设置为'lose'后设置为'win'


这里你需要的是赢家,输家和平局的变量。像这样:

$winner = '';
$loser  = '';
$draw   = false;

if($homescore > $awayscore) {
    $winner = 'home';
    $loser  = 'away';
} else if($homescore < $awayscore) {
    $winner = 'away';
    $loser  = 'home';
} else if($homescore === $awayscore) {
    $draw   = true;
}

Codepad Demo

此代码也使用else if,因为如果您确定谁赢了又输了就不需要评估其他条件。

答案 1 :(得分:0)

您需要更好地分组您的条件。

if ( ($hometeam && ($homescore > $awayscore)) || ($awayteam && ($awayscore > $homescore))) 
{
  $status= 'win'; 
}                       
else if ( ($hometeam && ($homescore < $awayscore)) || ($awayteam && ($awayscore < $homescore))) 
{
  $status= 'lose';
} 
else 
{
  $status= 'draw';
}

答案 2 :(得分:0)

if ($homescore > $awayscore) {
        $homestatus = 'win';
        $awaystatus = 'lose';
    } else if ($homescore < $awayscore) { 
        $homestatus = 'lose';
        $awaystatus = 'win';
    } else {
        $homestatus = 'draw';
        $awaystatus = 'draw';
    }

<ul class="match group">    
            <li>
                <ul class="team1 <?php echo $homestatus; ?>">
                    <li class="teamname"><h2><?php echo $homename; ?></h2></li>  
                    <li class="teamscore"><?php echo $homescore; ?></li>
                </ul>
            </li>
            <li>
                <ul class="team2 <?php echo $awaystatus; ?>">
                    <li class="teamname"><h2><?php echo $awayname?></h2></li>    
                    <li class="teamscore"><?php echo $awayscore?></li>                              
                </ul>
            </li>
            <li><ul class="matchinfo">
                    <li><a href="the_permalink()"><button>Get Report</button></a></li>
                </ul>
            </li>
</ul>