2016-06-10 60 views
-1

我有一個循環,我使用回聲出項目的數量:PHP IF,AND,OR與第二或破壞

$i = 1; 
[content] 
$i++; 

在我的內容我想獲得一個if語句來運作方式爲關閉值的$i

if ($user_id == 2 and $i != 1 || $i != 2) { 

} 

如果我離開了這部分:|| $i != 2它的工作原理然而,隨着它的腳本失敗並返回true。

我怎樣才能得到它與1和2值?

+2

使用'()'來強制你想要的解析順序?現在你讓PHP根據自己的[運算符優先級]選擇順序(http://php.net/manual/en/language.operators.precedence.php)。養成總是指定'()'的習慣,不管默認順序是否是你想要的。那麼您不必擔心回憶您所使用的任何語言的優先規則,並且可以始終執行您所期望的順序。 –

+2

不應該是'if($ user_id == 2 && $ i!= 1 && $ i!= 2)'? –

+2

'if($ user_id == 2 and($ i!= 1 || $ i!= 2))' - *我認爲*。如果沒有,我會拿子彈;-)所以開槍射擊! –

回答

1

概述

我會使用&&代替and,這是很好的總是整理更復雜IF語句用括號使

一)在美學上可以看到解析順序
b)您可以手動設置解析順序,尤其是與PHP的優先級不同時


修正

話雖這麼說:

你想要的條件觸發如果

  1. $user_id2 AND $i沒有1,或
  2. $i沒有2

所以,你可以這樣做:

if(($user_id == 2 && $i != 1) || ($i != 2)){ 
    //... 

在這裏你可以看到兩個命令都通過自己的括號括起來分離。


證明

  1. $i = 1$user_id = 1:第一托架是false,第二托架是true,條件火災
  2. $i = 1$user_id = 2:第一托架是false,第二支架是true,條件發生火災
  3. $i = 2$user_id = 1:第一托架是false,第二托架是false,條件不觸發
  4. $i = 2user_id = 2:第一托架是true,第二托架是false,條件火災
0

你真正想要的是和運算符。

if ($user_id == 2 and $i != 1 and $i != 2) { 
    ... 
} 

爲了執行if塊的內容,你需要所有這些條件都是真的,所以你是需要的操作符。

+0

這可能會反彈。 –

+0

啊,好吧!我認爲它必須是2和1或2,因爲我認爲2和1和2意味着$我有兩個值。我的錯! –

+0

@ Fred-ii-請解釋。什麼是問題? – MrSalmon