2016-01-19 3 views
-1

Очень глупый вопрос, я C# ребенок, я также программирую 4 года в php, но иногда если оператор не работает, когда я использую 'и' или '& &' внутри.Если заявление с и не будет работать?

Например текущая проблема заключается в следующем:

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")){ 

не будет работать? У меня есть миллионы строк в базе данных, и я не хочу данных xmlsoccer для 2015/2016, но когда я запускаю это, он ничего не возвращает.

Когда я удаляю только это && ($row['Source'] != "xmlsoccer"), все работает нормально.

Я 100% уверен, что это все правильно, например, когда я дамп

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

возвращается, например, «2013/2014» «xmlsoccer», но ничего внутри, если заявление ...

+0

Конечно, вы имеете 'ключ Source'? Не 'source' или' SOURCE' –

+0

И btw - вам лучше выбрать нужные данные с помощью mysql, используя 'where' вместо фильтрации результатов. –

+1

Имейте в виду отношение Chasles, я полагаю, что вместо этого вы должны использовать оператор '||' ** OR **. –

ответ

2

Имейте в виду Chasles отношение.Таким образом, чтобы объяснить, давайте делать некоторую математику:

if(a && b) может быть связан в:

если и б истинно так результат верен

Но если вам нужно инвертируйте это, вы будете думать:

if(not a and not b) который будет представлен следующим образом:

если ( и б не верно, так с истинно)

Но мы можем перевести это последнее предложение с theorm Шаля, который говорит:

A + B = C

(A + B)\ = C

так с Часом ль отношение результата

A\ . B\ = C (точка означает OR)

что соответствует Л || B = C

Таким образом, мы можем сказать, что (A + B)\ = C эквивалентно A\ + B\ = C что означает в программировании:

! (a && b) верно эквивалентно !a || !b также верно

Наконец, вы можете написать те 2, которые являются породами:

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

Если кто-то может добавить ссылку на английское отношение Chasles, я нашел только страницу википедии для своего родного языка. –

+0

Теперь понятно, спасибо :) – user1814358

+1

С удовольствием, я решил эту проблему один миллиард раз, так что если это может помочь! –

0

Во-первых, фильтруйте на уровне SQL, он должен возвращать только то, что вам нужно. Во-вторых вы четко спросить за все, что не xmlsoccer

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

Но вы смущены, когда вы сбросить значения, которые вы видите «2013/2014» и «xmlsoccer» и не идут в, если заявление. Из того, что я понял из вашего вопроса вы хотите все, что «xmlsoccer» от каждого сезона, за исключением «2015/2016»

Я думаю, что вы ищете это, если заявление:

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

Я хочу, чтобы все сезоны из всех источников, кроме 2015/2015 и xmlsoccer, поэтому я не хочу 2015/2016 И не хочу xmlsoccer. Я хочу 2015/2016 и tipgin, например, 2013/2014 и xmlsoccer или tipgin. ИЛИ делать работу, но ПОЧЕМУ? – user1814358

+0

Хорошо, я думаю, что сейчас понимаю, вы хотели оба эти значения, но не тогда, когда эти значения объединены. Я вижу, что кто-то еще ответил на ваш вопрос лучше, чем я, возможно, так, что я больше не буду вдаваться в это. –

Смежные вопросы