带有多个条件(` | ``以及`&;`)的if语句的php语法
上下文:在我们的网站上,我们使用if语句计算一个项目/订单是否符合免费送货的标准,该语句评估值“ff”是否为真。根据满足的条件,它会适当设置装运。我们现在需要评估一个项目是否与订单x一起免费装运。为了达到最佳效果,对于其他目的,如外部馈送,必须应用另一个条件(重量必须=0或无值),以便fw为免费运费。下面是代码,我不明白它为什么不起作用:带有多个条件(` | ``以及`&;`)的if语句的php语法,php,if-statement,syntax,operators,multiple-conditions,Php,If Statement,Syntax,Operators,Multiple Conditions,上下文:在我们的网站上,我们使用if语句计算一个项目/订单是否符合免费送货的标准,该语句评估值“ff”是否为真。根据满足的条件,它会适当设置装运。我们现在需要评估一个项目是否与订单x一起免费装运。为了达到最佳效果,对于其他目的,如外部馈送,必须应用另一个条件(重量必须=0或无值),以便fw为免费运费。下面是代码,我不明白它为什么不起作用: if($r['freeFreight'] == 'ff' || ($r['freeFreight'] == 'fw' && ($r['weig
if($r['freeFreight'] == 'ff' || ($r['freeFreight'] == 'fw' && ($r['weight'] == 0 || $r['weight'] == '') ) ) {
$r['shippingStandard'] = 0;
}
if语句中的条件是否与()集合过度隔离?或者,它们只是放错了位置。例如,应该是:
if(($r['freeFreight'] == 'ff') || ($r['freeFreight'] == 'fw' && $r['weight'] == 0 || $r['weight'] == '') ) {
$r['shippingStandard'] = 0;
}
对我来说,第二个更符合逻辑,因为:如果($r['freegreement']=='ff')-那么不管以下条件如何,语句都应该返回true并将变量设置为0。我的逻辑正确吗?很抱歉这个新问题
谢谢你能提供的任何帮助
因此,我认为,根据目前的答案(感谢所有参与帮助业余爱好者的人),我想我将尝试:
if( ($r['freeFreight'] == 'ff') || ( $r['freeFreight'] == 'fw' ) && empty( $r['weight'] ) ) {
$r['shippingStandard'] = 0;
}
计划用这个进行试验,如果根本错误,请建议。试试这个
if( $r['freeFreight'] == 'ff' || ( $r[ 'freeFreight' ] == 'fw' && empty( $r['weight'] ) ) ) {
$r['shippingStandard'] = 0;
}
使用empty
也可能更干净一些
如果你真的想更进一步,你可以这样做
if( $r[ 'freeFreight' ] == 'ff' ) {
$r[ 'shippingStandard' ] = 0;
} elseif( $r[ 'freeFreight' ] == 'fw' && empty( $r[ 'weight' ] ) ) {
$r[ 'shippingStandard' ] = 0;
} else {
// Everything else
}
如果要缩短变量,并在以后使用它们:
$freight = $r[ 'freeFreight' ];
$weight = isset( $r[ 'weight' ] ) ? $r[ 'weight' ] : null;
$shipping = $r[ 'shippingStandard' ]; // Or whatever you want the default value to be...
if( $freight == 'ff' || ( $freight == 'fw' && empty( $weight ) ) ) {
$shipping = 0;
}
// ... Later down the file
$r = array(
'freeFreight' => $freight,
'weight' => $weight,
'shippingStandard' => $shipping
);
我真的不知道文件的其余部分是什么样子的,比如如果这是一个获取shipping的函数,那么您只需返回$shipping
。希望这有帮助。您应该能够移动这些概念以获得您想要的内容试试这个
if( $r['freeFreight'] == 'ff' || ( $r[ 'freeFreight' ] == 'fw' && empty( $r['weight'] ) ) ) {
$r['shippingStandard'] = 0;
}
使用empty
也可能更干净一些
如果你真的想更进一步,你可以这样做
if( $r[ 'freeFreight' ] == 'ff' ) {
$r[ 'shippingStandard' ] = 0;
} elseif( $r[ 'freeFreight' ] == 'fw' && empty( $r[ 'weight' ] ) ) {
$r[ 'shippingStandard' ] = 0;
} else {
// Everything else
}
如果要缩短变量,并在以后使用它们:
$freight = $r[ 'freeFreight' ];
$weight = isset( $r[ 'weight' ] ) ? $r[ 'weight' ] : null;
$shipping = $r[ 'shippingStandard' ]; // Or whatever you want the default value to be...
if( $freight == 'ff' || ( $freight == 'fw' && empty( $weight ) ) ) {
$shipping = 0;
}
// ... Later down the file
$r = array(
'freeFreight' => $freight,
'weight' => $weight,
'shippingStandard' => $shipping
);
我真的不知道文件的其余部分是什么样子的,比如如果这是一个获取shipping的函数,那么您只需返回
$shipping
。希望这有帮助。您应该能够移动这些概念以获得您想要的内容您的第一个选项应该与以下内容相同:
if ($r['freeFreight'] == 'ff') {
$r['shippingStandard'] = 0;
}
elseif ($r['freeFreight'] == 'fw') {
// the dual check for an empty value here is kind of redundant and unneccessary.
// I'd probably just use "if ($r['weight'])" and be done with it
if ($r['weight'] == 0) {
$r['shippingStandard'] = 0;
}
elseif ($r['weight'] == '') {
$r['shippingStandard'] = 0;
}
else {
// $r['shippingStandard'] stays whatever it was before
}
}
else {
// $r['shippingStandard'] stays whatever it was before
}
如果这个逻辑对你来说是正确的,那么你应该是正确的,我会
print\r($r)
,以确保它持有你所期望的东西。在第一个示例中,您的括号正是我要做的。您的第一个选项应该与以下内容相同:
if ($r['freeFreight'] == 'ff') {
$r['shippingStandard'] = 0;
}
elseif ($r['freeFreight'] == 'fw') {
// the dual check for an empty value here is kind of redundant and unneccessary.
// I'd probably just use "if ($r['weight'])" and be done with it
if ($r['weight'] == 0) {
$r['shippingStandard'] = 0;
}
elseif ($r['weight'] == '') {
$r['shippingStandard'] = 0;
}
else {
// $r['shippingStandard'] stays whatever it was before
}
}
else {
// $r['shippingStandard'] stays whatever it was before
}
如果这个逻辑对你来说是正确的,那么你应该是正确的,我会
print\r($r)
,以确保它持有你所期望的东西。第一个例子中的括号正是我要做的。您是否正在检查isset($r['weight'])
?我没有。。smh-如果($r['freegreement']='ff')| | |(isset($r['weight']&&r['freegreement']='fw'&&&r['weight']==0 |$$r['weight']=''){$r['shippingStandard']=0;},情况也会如此emtpy
将比执行所有这些检查更干净,如果您能提供帮助,就永远不要依赖一种语言的运算符优先级规则,尤其是在您使用多种语言的情况下。这可能有点繁琐,但始终使用适当的括号来强制执行“您的”规则,而不是希望语言解析能为你做得很好。@MarcB,好提示。JamesLee:我会同意Ascheer的答案。你在检查isset($r['weight'])
?我不是..smh-那会比如果($r['freegrage']='ff')|(isset($r['weight']&$r['freegrage']='fw'&$r['weight']='fw'&$r['weight']=0)好吗==''){$r['shippingStandard']=0;}emtpy
将比执行所有这些检查更干净,如果您能提供帮助,就永远不要依赖一种语言的运算符优先级规则,尤其是在您使用多种语言的情况下。这可能有点繁琐,但始终使用适当的括号来强制执行“您的”规则,而不是希望语言解析能为您正确地完成它。@MarcB,好提示。JamesLee:我同意Ascherer的答案。问题是,如果$r['freegarity']='ff'我们不在乎$r['weight']=null、、0或9081239082。这是否应该用if-else语句来完成?我想这是我要给空的一个镜头,但括号中没有第一个条件。这可能正是我们要找的。是的,我修复了它,所以这是您想要的。您可以通过分配$r['freegrage']来进一步清理它
到$freight
,因此它更适合于行,idk,如果您稍后将在功能化的另一个编辑中使用该变量,@JamesLee,如果您想在本节中对其进行细分way@JamesLee尝试留下评论而不是编辑答案,这些评论将被视为无效而拒绝,尝试评论或回答“问题是,如果$r['freegarity']='ff'我们不在乎$r['weight']=null、、0或9081239082。这是否应该用if-else语句来完成?我想这是我要给空的一个镜头,但括号中没有第一个条件。这可能正是我们要找的。是的,我修复了它,所以这是您想要的。您可以通过分配$r['freegrage']来进一步清理它
到$freight
,因此它更适合于行,idk,如果您稍后将在功能化的另一个编辑中使用该变量,@JamesLee,如果您想在本节中对其进行细分way@JamesLee请尝试留下评论而不是编辑答案,这些评论将被视为无效而拒绝,如果($r['weight']),请尝试发表评论或回复“)
是一个非常懒散的检查,没有留下太多的话来说明你在检查什么。请使用类似empty
的东西来确切说明你在寻找什么。仅仅因为PHP允许你用代码吊死自己,并不意味着你应该这样做。if(empty($r['weight'))