1

インデックス [3] の価格とインデックス [4] の割引タイプ (%、固定) で配列に保存された特定の範囲があります。これらの範囲内で購入する人は、利用可能な割引を受ける必要があります. 私の現在の問題は、配列の範囲が任意の数になる可能性があることです。たとえば、ここでは variable$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;
    }
}

スクリプトを 1 つ覚えているので、ここで取得しました。for-loop がcase定義の後に開始することを確認してください。この例では"undo":...通常、forループは or メソッドにパックされて、functionよりクリーンになります。ステートメント内のfornew の代わりに -loop を開始することはできません。caseswitch

于 2016-04-11T15:27:16.177 に答える