2016-11-10 2 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); 
    } 
} 

Даже если я пишу правильное значение Wich есть в array1 или массив2 У меня есть ошибка выдвинутую throw new \ Exception.

Если удалить пунктили в если заявление, и я написать правильное значение, не произошло никакой ошибки, но я не могу проверить второе условие.

Где я ошибаюсь в своем заявлении if?

+5

Изменение 'OR' для' AND' – Blinkydamo

+0

Спасибо всем, я лучше понимаю, почему мой код не работает, такой новобранец ошибка. Я проверю все ваши предложения, чтобы лучше понять предложение AND OR в выражении if! –

ответ

2

Вам необходимо использовать l ogical и (& &) нет или. Вы говорите

Если $ slug не находится в массиве 1 или не находится в массиве 2, выбросьте исключение. Поэтому, чтобы не выбрасывать исключение, значение slug должно быть в BOTH массиве 1 и массиве 2.

Что вы действительно хотите (я полагаю), если это, если значение slug не в любом массиве, исключение , но если он существует в одном из массивов, ничего не делайте и продолжайте. Таким образом изменить ваш, если заявление:

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

Это условие будет выдавать исключение, если значение не существует в одном из массивов. Поэтому, если ваше значение существует в одном массиве, но не в другом, будет выбрано исключение.

Проверить эту логическую таблицу дизъюнкции на википедии: https://en.wikipedia.org/wiki/Truth_table#Logical_disjunction_.28OR.29

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. 
Смежные вопросы