2016-11-10 41 views
0

我的代碼如果有或(||)參數不以in_array法工作報告

public function dynamicSlugAction(Request $request, $slug) 
{ 
    $array1 = ["coffee", "milk", "chocolate", "coca-cola"]; 
    $array2 = ["water", "juice", "tomato-juice", "ice-tea"]; 
    if (!in_array($slug, $array1) || !in_array($slug, $array2)) { 
     throw new \Exception("The var " . strtoupper($slug) . " is not exist with parameter (slug): " . $slug); 
    } 
} 

即使我寫一個正確的價值至極這個片段存在於數組1或數組2我有推出的錯誤拋新\異常

如果我刪除或條款如果聲明,我寫了一個合適的值,沒有出現錯誤,但我不能檢查第二個條件。

我在if語句中錯在哪裏?

+5

更改'或'一個'和' – Blinkydamo

+0

感謝所有,我更好地理解爲什麼我的代碼不能正常工作,這樣的菜鳥錯誤。我會檢查你的所有建議,以便更好地理解if語句中的AND OR子句! –

回答

2

你需要使用l ogical和(& &)不是或。您在說

如果$ slug不在array1中或不在數組2中,則拋出異常。所以爲了不拋出異常,slug值將需要在BOTH array 1和array 2中。

你真的想要什麼(我假設),如果如果這個slug的值不在這兩個數組中的任何一箇中,拋出異常,但如果它存在於其中一個數組中,則什麼都不做,繼續進行。因此,改變你的if語句:

if (!in_array($slug, $array1) && !in_array($slug, $array2)) { 
    throw new \Exception("The var ".strtoupper($slug)." is not exist with parameter (slug): ".$slug); 
} 
1

您必須使用and操作:

public function dynamicSlugAction(Request $request, $slug) 
{ 
    $array1 = ["coffee", "milk", "chocolate", "coca-cola"]; 
    $array2 = ["water", "juice", "tomato-juice", "ice-tea"]; 
    if (!in_array($slug, $array1) and !in_array($slug, $array2)) { 
     throw new \Exception("The var ".strtoupper($slug)." is not exist with parameter (slug): ".$slug); 
    } 
} 
1

如果你的意思是,如果存在任何陣列的$slug那麼你不想拋出錯誤,那麼你應該使用&&

if (!in_array($slug, $array1) && !in_array($slug, $array2)) 
2

當你想檢查,如果2個條件是true,則使用的邏輯運算符和(& &)。該或操作(||)是檢查是否任何一個是真正的。只要記住布爾代數爲了不失去追蹤。

或者:

statment1=true; 
statment2=false; 
if(statment1=true||statment2=true){do stuff}//it will run because at least one statment is true 

和:

statment1=true; 
statment2=false; 
if(statment1=true && statment2=true){do stuff}//it wont run because both statments must be true.