如何结合月数与页数调整营销套餐的定价折扣计算规则?
问题:叠加页数折扣的定价逻辑实现修改
变量定义
$number_of_monthes:套餐月数,可选值为("1","3","6","12")$number_of_pages:账户活跃页数,可选值为("1","3","7")$marketing_level:账户可添加广告数量,可选值为("25","100","300","500")
当前实现代码片段
if($data['marketing_level'] == 100){ if($data['number_of_monthes '] == 1) $marketing_cost = ( 50 * $number_of_monthes ); if($data['number_of_monthes '] == 3) $marketing_cost = ( 50 * $number_of_monthes * $number_of_pages * 0.85 ); if($data['number_of_monthes '] == 6) $marketing_cost = ( 50 * $number_of_monthes * $number_of_pages * 0.70 ); if($data['number_of_monthes '] == 12) $marketing_cost = ( 50 * $number_of_monthes * $number_of_pages * 0.55 ); }
现有规则与新需求
现有规则
- 购买3个月套餐享15%折扣(对应系数0.85)
- 购买6个月套餐享30%折扣(对应系数0.70)
新需求
在月数折扣基础上叠加页数额外折扣,最终总折扣系数计算规则:
- 月数=3时:
- 页数=1:保持基础15%折扣(系数0.85)
- 页数=3:总折扣提升至20%(系数0.80)
- 页数=7:总折扣提升至30%(系数0.70)
- 月数=6时:
- 页数=1:保持基础30%折扣(系数0.70)
- 页数=3:总折扣提升至40%(系数0.60)
- 页数=7:总折扣提升至45%(系数0.55)
- 月数=1、12时:规则不变,按原逻辑执行
修改后的代码实现
if($data['marketing_level'] == 100){ // 提取变量,修正原键名的空格问题 $months = $data['number_of_monthes']; $pages = $data['number_of_pages']; $discount_factor = 1.0; switch($months) { case 1: $marketing_cost = 50 * $months; break; case 3: // 根据页数匹配3个月套餐的总折扣系数 match($pages) { 1 => $discount_factor = 0.85, 3 => $discount_factor = 0.80, 7 => $discount_factor = 0.70, }; $marketing_cost = 50 * $months * $pages * $discount_factor; break; case 6: // 根据页数匹配6个月套餐的总折扣系数 match($pages) { 1 => $discount_factor = 0.70, 3 => $discount_factor = 0.60, 7 => $discount_factor = 0.55, }; $marketing_cost = 50 * $months * $pages * $discount_factor; break; case 12: $marketing_cost = 50 * $months * $pages * 0.55; break; } }
代码说明
- 修正了原代码中
$data['number_of_monthes ']的空格问题,避免因键名错误导致的取值失败 - 使用
switch和match结构替代多层if,逻辑更直观,后续新增规则时易扩展 - 针对月数3和6的场景,直接根据页数映射最终的总折扣系数,替代原有的基础折扣,实现叠加后的折扣效果
- 月数1和12的逻辑保持原有规则不变,确保兼容性
内容的提问来源于stack exchange,提问作者Misha
相关产品推荐
相关产品推荐

