1

我将某些范围保存在数组中,索引 [3] 处的价格和索引 [4] 处的折扣类型(%,固定)。在这些范围内购买的任何人都应该获得可用的折扣。我当前的问题是数组的范围可以是任何数量,例如在变量中$a,有4 nested array,但在某些情况下,我会做6 nested array,或8 nested array,依此类推。

所以,我在我的 switch 语句中运行 for 循环,我得到了一个错误Parse error: syntax error, unexpected 'for' (T_FOR), expecting case (T_CASE) or default (T_DEFAULT) or '}'

这是我的代码:-

<?php

$a = array(array('0', '10', '200', '0'), array('11', '20', '20', '1'), array('20', '50', '25', '1'), array('50', '100', '5000', '0'));

$quantity = 25;

$count = count($a);


switch($quantity) {
    for($i=0;$<=$count-1;$i++) {
        case ($quantity > $a[$i][0] && $quantity < $a[$i][1]) :
            echo "Discount Available for Quantity > ".$a[$i][0]." and < ".$a[$i][1];
            break;
    }
    default:
        echo 'No Discount';
        break;
}

?>

我应该如何为上述场景设计我的算法。

注意:阵列类型:-

$variable = array ("lowest_quantity_range", "highest_quantity_range", "discount_value", "discount_type");

折扣类型将是1for%0for fixedamount

4

3 回答 3

3

您不能在 switch 语句中使用 for 循环。您需要将 for 循环放在 switch 语句之外:

<?php

$a = array(array('0', '10', '200', '0'), array('11', '20', '20', '1'), array('20', '50', '25', '1'), array('50', '100', '5000', '0'));

$quantity = 25;

$count = count($a);

foreach($a as $item) {
switch($quantity) {

        case ($quantity >$item[0] && $quantity < $item[1]) :
            echo "Discount Available for Quantity > ".$item[0]." and < ".$item[1];
            break;
       default:
        echo 'No Discount';
        break;
}
    }
?>
于 2013-09-24T23:38:11.740 回答
1

看来您甚至根本不应该在这里使用开关...

$a = array(
    array('0', '10', '200', '0'),
    array('11', '20', '20', '1'),
    array('20', '50', '25', '1'),
    array('50', '100', '5000', '0')
);

$quantity = 25;
$found = false;

foreach ($a as $item)
{
    if ($quantity >$item[0] && $quantity < $item[1])
    {
        echo "Discount Available for Quantity > ".$item[0]." and < ".$item[1];
        print_r($item);
        $found = true;
    }
}

if (!$found)
{
    echo "No Discounts";
}
于 2013-09-25T01:44:55.787 回答
0

语句中的示例for-loop :switch

if( isset( $_POST[ "action" ] ) ) { 
    $action = $_POST[ "action" ];
    switch ( $action ) {
        case "add" : addItem(); break;
        case "del" : delItem(); break;
        case "undo" : for(
                            $i = 0; 
                            $i <= 10; 
                            $i ++ ) { 
                        switch ( $_SESSION[ "id" ] ) {
                            case $i : undoAction( $i ); break; 
                        }
                     }
                     $_SESSION = array();
                     break;
    }
}

我记得我做过的一个脚本,所以我在这里抓住了它。确保您的for-loop 在case定义之后开始。在这个例子中,它是"undo":......通常for-loops 被打包在一个functionor 方法中以使其更干净。您不能在语句中为 new 启动一个-loop forcaseswitch

于 2016-04-11T15:27:16.177 回答