递归计算阶梯价格
2020-10-19 本文已影响0人
花佬爷
场景描述
假定一段距离配送距离加价规则如下:
- 起送价8元
- 2-6公里内,每增加1公里,配送费用增加2元
- 6-10公里内,每增加2公里,配送费用增加3元
- 10公里以上,每增加5公里,配送费用增加6元
/**
* @param $items [{"distance":2,"step":1,"inc_fee":2},{"distance":6,"step":2,"inc_fee":3},{"distance":10,"step":5,"inc_fee":6}]
* @param $distance int 距离
* @param $fee int 基础费用,起送价
* @return float|int
*/
public function recursionRideItem($items, $distance, $fee)
{
for ($i = 0; $i < count($items); $i++) {
$out_distance = $distance - $items[$i]['distance'];// 超出当前取件的距离
if(isset($items[$i+1])) {
// 仍然有上限的情况下,累计当前区间的跑腿费用
$fee += $items[$i]['inc_fee'] * ceil(($items[$i+1]['distance'] - $items[$i]['distance']) / $items[$i]['step']);
// 删除当前单元
array_splice($items, $i, 1);
// 继续递归计算下一个区间费用信息
$fee = $this->recursionRideItem($items, $distance, $fee);
break;
}
else// 达到最高区间范围,计入累计金额即可
$fee += $items[$i]['inc_fee'] * ceil($out_distance / $items[$i]['step']);
}
return $fee;
}