1

背景:在我们的网站上,我们使用 if 语句评估一个值 - 'ff' - 是否为真,计算一个项目/订单是否符合免费送货的标准。根据满足的条件,它会适当地设置运输。我们现在需要评估一个商品是否按_的顺序免费送货。最重要的是,对于其他目的,例如外部提要,必须应用另一个条件(重量必须 = 0 或没有值),fw 才能免费送货。这是代码,我无法弄清楚它为什么不起作用:

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

两者中的第二个对我来说似乎更合乎逻辑,因为: if ($r['freeFreight'] == 'ff') - 那么无论以下条件如何,语句都应返回 true 并将变量设置为 0。我的逻辑是否正确? 对不起这个新手问题......

谢谢你尽你所能的帮助。


所以我想也许,根据迄今为止的答案(感谢所有帮助业余爱好者的人) - 我想我将尝试:

if( ($r['freeFreight'] == 'ff') || ( $r['freeFreight'] == 'fw' ) && empty( $r['weight'] ) ) { 
    $r['shippingStandard'] = 0;
}

打算用这个试一下,如果根本不对,请指教。

4

2 回答 2

2

试试这个?

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

我真的不知道文件的其余部分看起来如何,比如如果这是在一个获取运输的函数中,你可以简单地 return $shipping。希望这可以帮助。您应该能够移动概念以获得您想要的

于 2013-05-17T21:24:13.820 回答
-1

您的第一个选项应与以下选项相同:

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)确保它持有你期望它持有的东西。你在第一个例子中的括号正是我会怎么做的。

于 2013-05-17T21:44:36.240 回答