0

これが理にかなっていることを願っています。現在、次のコードを使用して、チェックボックスチェックの数を合計し、その数に基づいて送料を取得しています。これにより、配送料が 1 セット割引になります (地面)。複数の配送オプションを追加したいので、switch/case ステートメントをもう 1 セット追加する必要があります。

//Add up club totals for shipping
            $clubTotal = array(
                            $driversChecked,
                            $hybridsChecked,
                            $woodsChecked,
                            $boxesChecked,
                            $wedgesChecked,
                            );  

            //see what shipping was picked
            $shippingChoice = $_POST['ShipMethod'];

            //Figure out ground shipping
            if (array_sum($clubTotal))
            {
                switch(array_sum($clubTotal))
                {
                    case 6:
                        $shippingCost =  15.99 ;
                        break ;

                    case 7:
                    case 8:
                        $shippingCost =  16.99 ;
                        break ;

                    case 9:
                    case 10:
                        $shippingCost =  17.99 ;
                        break ;

                    case 11:
                    case 12:
                        $shippingCost =  18.99 ;
                        break ;

                    case 13:
                        $shippingCost =  19.99 ;
                    break ;

                    case 14:
                        $shippingCost =  20.99 ;
                    break ;

                    case 15:
                        $shippingCost =  21.99 ;
                    break ;

                    case 16:
                        $shippingCost = 22.99;
                    break ;

                    default:
                        $shippingCost = 14.99;
                        break ;
                }
            }

$shippingChoice = $_POST['ShipMethod'];が発送方法を取得している場合、それを使用して使用する switch/case ステートメントを選択するにはどうすればよいですか。「ground」の値が返された場合と同様$shippingChoiceに、現在の switch/case ステートメントが使用されます。「2 Day」が返された場合は、別の switch/case ステートメントが使用されます。

4

2 に答える 2

1

このようなものが欲しいですか?他の配送​​方法のサブアレイを追加します。

$shippingCostData = array(
    'ground' => array(
        6 => 15.99,
        7 => 16.99,
        8 => 16.99,
        9 => 17.99,
        10 => 17.99,
        11 => 18.99,
        12 => 18.99,
        13 => 19.99,
        14 => 20.99,
        15 => 21.99,
        16 => 22.99,
        'default' => 14.99,
    ),
);

$method = 'ground';
$clubTotalSum = array_sum($clubTotal);
$shippingCost = (isset($shippingCostData[$method][$clubTotalSum]) ? $shippingCostData[$method][$clubTotalSum] : $shippingCostData[$method]['default']);

このようなものを使用して配送方法をフィルタリングし、有効であることを確認することもできます.

$method = (isset($shippingCostData[$_POST['shippingMethod']]) ? $_POST['shippingMethod'] : key($shippingCostData));
于 2013-10-02T21:14:56.227 に答える
1

実行時に柔軟な別の形式で配送料を定義する必要があります。例えば:

$costs = [
    1 => 14.99, // 1 or more = 14.99
    6 => 15.99, // 6 or more
    7 => 16.99,
    9 => 17.99,
];

次に、数値とコスト配列を取り、コストを返す関数を作成できます。

function calculateCost($items, $costs) {
    ksort($costs); // just to be on the safe side
    $result = reset($costs);
    foreach($costs as $number => $cost) {
        if ($number > $items) break;
        $result = $cost;
    }

    return $result;
}

これを行った後は、複数のコスト配列を保持し、必要なものに転送するのは簡単です。

$costs = [
    'ground' => [
        1 => 14.99,
        6 => 15.99,
    ],
    'air' => [
        1 => 24.99,
        6 => 25.99,
    ],
];

$shippingChoice = $_POST['ShipMethod'];
$cost = calculateCost(array_sum($clubTotal), $costs[$shippingChoice]);

これは、好きなだけ多くの配送方法に簡単に拡張できます。

于 2013-10-02T21:16:03.280 に答える