我有这段代码
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语句在哪里错了?
答案 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))