对于PHP中的Loop Inside Switch语句

时间:2013-09-24 23:33:34

标签: php arrays for-loop switch-statement nested-loops

我在数组中保存了某些范围,其中索引为[3],折扣类型为索引[4](%,已修复)。 在这些范围内购买的任何人都应该获得折扣。 我的当前问题是数组的范围可以是任何计数,例如,在变量$a中,有4 nested array,但在某些情况下,我会创建6 nested array或{ {1}},依此类推。

所以,我在switch语句中运行循环,我收到错误8 nested array

这是我的代码: -

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");的{​​{1}}或1金额的%

3 个答案:

答案 0 :(得分: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;
}
    }
?>

答案 1 :(得分:0)

看起来你根本就不应该使用开关......

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

答案 2 :(得分:0)

示例for - 在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定义后开始case - 循环。在此示例中,它"undo": ...通常for - 循环以function或方法打包,以使其更加干净。 您无法为for语句中的新case启动switch - 循环。