0

我遇到了一个循环混乱,实际上,我正在尝试检查,

第一个条件:如果凭证类型是AMOUNT = AMOUNT并且value > 0 and $totalRules <= 1意味着这是用户第一次使用优惠券,然后让用户使用它。

第二个条件:我正在检查是否AMOUNT = AMOUNT并且value > 0 and $totalRules >=1意味着用户已经使用了优惠券。

第三条件:如果这一次用户选择了不同AMOUNT !=AMOUNT$totalRules >=1优惠券,可能是 PERCENT 类型,那么我们不允许用户使用此优惠券。

现在,第一次,代码工作正常,但如果刷新页面,即使我使用了其他条件也变得真实break;

谁能帮我解决这个问题?我知道我需要改进该代码,我需要前辈的帮助。

    $vDetail = array('AMOUNT', 'ONLY'); // For now check if the coupon type is AMOUNT (set from admin)
    $voucherAllowed = 1; // Total number of voucher allowed, Global variable.
    $totalRules = 1; // First tiem it'll be 0, then always adds 1 in that variable to check if user has already used any coupon.
    $voucherTypeArray ['AMOUNT'] = 8.00; 
    $voucherTypeArray ['PERCENT'] = 0.00;



foreach($voucherTypeArray as $thisVoucher => $vValue )
{
    echo "$vDetail[0] == $thisVoucher && $vValue>0 &&  $totalRules <= $voucherAllowed <br>";
    if($vDetail[0]==$thisVoucher && $vValue>0 && (int)$totalRules <= $voucherAllowed)
    { $throwError = '0'; break; } // Continue to the next rule and add this one.
    elseif($vDetail[0]==$thisVoucher && $vValue > 0 && (int)$totalRules >= $voucherAllowed)
    {
        $throwError = "Only $voucherAllowed voucher can be redeem at this time.";
        break;
    }
    elseif($vDetail[0]!=$thisVoucher && (int)$totalRules >= $voucherAllowed)
    {
        $throwError = 'aYou cannot redeem this voucher at this time.';
        break;
    }
  }
4

1 回答 1

1

我在您的代码中看到了两个问题:

if($vDetail[0]==$thisVoucher && $vValue>0 && (int)$totalRules <= $voucherAllowed)

$vDetail不是一个数组,但您正在访问它。

这意味着它将把它$vDetail当作一个字符数组(在这种情况下取​​第一个字母A)。确保这是您的意思(您的代码正在有效地比较:)$voucher['AMOUNT'] == 'A'

而且您的条件不考虑$totalRules == 1

于 2013-10-30T21:37:47.560 回答