如果带有或(||)参数的语句不适用于in_array方法

时间:2016-11-10 11:06:57

标签: php arrays if-statement

我有这段代码

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);
    }
}

即使我写了一个在array1或array2中存在的正确值,我也会在 throw new \ Exception 中启动错误。

如果我删除 if 语句中的或子句,并且我写了一个正确的值,则不会发生错误,但我无法检查第二个条件。

我的if语句在哪里错了?

5 个答案:

答案 0 :(得分:2)

您需要使用逻辑和(&&)not或。你在说

如果$ slug不在array1中,或者在数组2中不是,则抛出异常。因此,为了不抛出异常,slug值需要在BOTH数组1和数组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 :(得分:2)

当你想检查时,如果2个条件为真则使用和(&&)的逻辑运算符。或者运算符(||)检查是否有一个是真的。请记住布尔代数为了不失去轨道。

或者:

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.

答案 2 :(得分:1)

if (!in_array($slug, $array1) || !in_array($slug, $array2))

如果某个数组中不存在值,则此条件将抛出异常。因此,如果您的值存在于一个数组中但不存在于另一个数组中,则将抛出异常。

查看维基百科上的这个逻辑分离表: https://en.wikipedia.org/wiki/Truth_table#Logical_disjunction_.28OR.29

答案 3 :(得分: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);
    }
}

答案 4 :(得分:1)

如果您的意思是如果$slug存在于任何数组中,那么您不想抛出错误,那么您应该使用&&

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