我希望这是有道理的。现在,我正在使用以下代码将复选框检查的数量相加,并根据该数字获得运费。这只能让我获得一个运费(地面)。我知道想要添加多个运输选项,所以我需要添加另一组开关/案例语句。
//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'];
正在获取我的 ship 方法,我如何使用它来选择要使用的开关/case 语句。就像如果$shippingChoice
返回"ground"的值一样,它将使用我当前的开关/case 语句。如果它返回"2 天",它将使用我将做出的另一个开关/案例语句。
你想要这样的东西吗?为其他运输方式添加子阵列。
$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));
您应该以另一种在运行时更具延展性的形式定义运费。例如:
$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]);
您可以轻松地将其扩展到任意数量的运输方式。