如果陈述有和不起作用?

时间:2016-01-19 12:43:37

标签: php

非常愚蠢的问题,我是C#孩子,我也用PHP编程了4年,但有时候当我使用'和'或'&&&'时声明不起作用内部。

例如目前的问题是:

    while($row = $res->fetch()){
        if(($row['Season'] != "2015/2016") && ($row['Source'] != "xmlsoccer")){ 
        $i3++; if($i3==1)hisHeader();
        $eventy = $row['HomeTeam'] . '-v-' . $row['AwayTeam'];
        $stagey = $row['League'];

        $datetime = new DateTime($row['Date']);
        $la_time = new DateTimeZone($zone);
        $datetime->setTimezone($la_time);
        $date = $datetime->format('Y-m-d');
        $time = $datetime->format('H:i');

        $url = toAscii($eventy) . "/" . toAscii($stagey) . "/"  . code36($row['HisID']);
        echo "<tr class='brown' style='height:20px;'>" , "<td style='width:120px; border:1px solid #444;'>" , "<matches-list>" , $date , "</matches-list>" , "</td>" , "<td style='width:60px; border:1px solid #444;'>" , "<matches-list>" , $time , "</matches-list>" , "</td>" , "<td class='nav' style='border:1px solid #444;'>" , "<matches-list>" , "<a href='".$url."' title='$matchtitle'>" ,$row['EventName'] ," (<span style='color:#555'>{$row['League']}</span>)", "</matches-list>","</td>";
        if($row['Status'] != 0){    
          echo "<td style='width:60px; border:1px solid #444;'>", "<matches-list>" , 
          $row['HalfTimeHomeGoals'] . ' : ' . $row['HalfTimeAwayGoals'], "</matches-list>", "</td>", 
          "<td style='width:60px; border:1px solid #444; color: #007AFF'>","<matches-list>" , 
          $row['HomeGoals'] . ' : ' . $row['AwayGoals'], "</matches-list>","</td></tr>";
      }
      else{
        echo "<td style='width:60px; border:1px solid #444; color: #777777' colspan='2' style='text-align:center !important;'>",
        "<matches-list>", "NO RESULTS YET" ,"</matches-list>","</td>";
      }
    }
    }
    echo "</tbody></table>";
}

为什么

if(($row['Season'] != "2015/2016") && ($row['Source'] != "xmlsoccer")){ 

不行吗?我在数据库中有数百万行,我不想要2015/2016的xmlsoccer数据,但是当我运行它时它什么都不返回。

当我删除这个&& ($row['Source'] != "xmlsoccer")时,一切正常。

我百分百肯定这一切都是正确的,例如当我转储

var_dump($row['Season'] . " " . $row['Source']); 

它返回例如'2013/2014''xmlsoccer',但if语句中没有任何内容......

2 个答案:

答案 0 :(得分:2)

请记住Chasles的关系。所以要解释一下,让我们做一些数学:

if(a && b)可以关联在:

  

如果 a b 为真,那么结果为真

但是如果你需要反转它,你会想到:

if(not a and not b)代表如下:

  

if( a b 不为真,所以c为真)

但我们可以用Chasles theorm来翻译最后一句话:

A + B = C

(A + B)\ = C

所以使用Chasles关系,结果是

A\ . B\ = C(点表示OR

对应 A || B = C

所以我们可以说(A + B)\ = C等同于A\ + B\ = C,这意味着在编程中:

! (a && b)为真相当于 !a || !b也是如此

最后你可以写出两个相同的条件:

  1. if( ! ( $row['Season'] == "2015/2016") && $row['Source'] == "xmlsoccer" ) )
  2. if( $row['Season'] != "2015/2016") || $row['Source'] != "xmlsoccer" )

答案 1 :(得分:0)

首先在SQL层上过滤,然后它应该只返回你需要的东西。 其次,你明确要求一切不是xmlsoccer

($row['Source'] != "xmlsoccer")

但是当您转储您看到的“2013/2014”和“xmlsoccer”的值并且不进入if语句时,您会感到困惑。 从我对你的问题的理解,除了'2015/2016'之外,你想要每个季节都有“xmlsoccer”的东西

我认为你正在寻找这个if语句:

if(($row['Season'] != "2015/2016") && ($row['Source'] == "xmlsoccer")){