我有这段代码:
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 语句哪里错了?
您需要使用逻辑与(&&)而不是或。 你说的是
如果 $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);
}
当你想检查,如果两个条件都为真,那么使用逻辑运算符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.
if (!in_array($slug, $array1) || !in_array($slug, $array2))
如果数组之一中不存在值,则此条件将引发异常。因此,如果您的值存在于一个数组中但不存在于另一个数组中,则会抛出异常。
查看维基百科上的逻辑或表: https://en.wikipedia.org/wiki/Truth_table#Logical_disjunction_.28OR.29
您必须使用
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);
}
}
如果您的意思是如果
$slug
存在于任何数组中,那么您不想抛出错误,那么您应该使用 &&
if (!in_array($slug, $array1) && !in_array($slug, $array2))