带有 or (||) 参数的 If 语句不适用于 in_array 方法

问题描述 投票:0回答:5

我有这段代码:

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 语句中的 or 子句并写入正确的值,则不会发生错误,但我无法检查第二个条件。

我的 if 语句哪里错了?

php arrays if-statement
5个回答
2
投票

您需要使用逻辑与(&&)而不是或。 你说的是

如果 $slug 不在数组 1 或数组 2 中,则抛出异常。 因此,为了不引发异常,slug 值需要同时位于数组 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);
}

2
投票

当你想检查,如果两个条件都为真,那么使用逻辑运算符and(&&)。或运算符(||)是检查其中一个条件是否为真。只要记住布尔代数就不会丢失轨道。

或者:

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.

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))
© www.soinside.com 2019 - 2024. All rights reserved.