weid()])->order('id asc')->select()->toArray(); if (empty($extend_list)) { return 0; } else { return $this->calc_unit($area_id, $buy_num, $extend_list); } } /** * 计算某个具单元的运费 * * @param 配送地区 $area_id * @param 购买数量 $num * @param 运费模板内容 $extend * @return number 总运费 */ private function calc_unit($area_id, $num, $extend) { if (!empty($extend) && is_array($extend)) { $calc_total = array( 'error' => '该地区不配送!!' ); //dump($extend); foreach ($extend as $v) { /** * strpos函数返回字符串在另一个字符串中第一次出现的位置,没有该字符返回false * 参数1,字符串 * 参数2,要查找的字符 */ if (strpos($v['area_id'], "," . $area_id . ",") !== false) { unset($calc_total['error']); $areaarray = Area::find($area_id); if (!empty($areaarray)) { $areaarray = $areaarray->toArray(); } if ($num <= $v['snum']) { //在首重数量范围内 $calc_total['price'] = $v['sprice']; } else { //超出首重数量范围,需要计算续重 $calc_total['price'] = sprintf('%.2f', ($v['sprice'] + ceil(($num - $v['snum']) / $v['xnum']) * $v['xprice'])); } $calc_total['info'] = $areaarray['area_name'] . ',首重(小于等于1千克KG) ' . $v['sprice'] . '元' . ' 续重(每千克KG) ' . $v['xprice'] . '元,总计 ' . $num . ' 千克KG'; return $calc_total; } } //没有找到则选择默认运费选项 if (isset($extend[0]) && is_array($extend)) { unset($calc_total['error']); $areaarray = Area::find($area_id); if (!empty($areaarray)) { $areaarray = $areaarray->toArray(); } if ($num <= $extend[0]['snum']) { //在首重数量范围内 $calc_total['price'] = $extend[0]['sprice']; } else { //超出首重数量范围,需要计算续重 $calc_total['price'] = sprintf('%.2f', ($extend[0]['sprice'] + ceil(($num - $extend[0]['snum']) / $extend[0]['xnum']) * $extend[0]['xprice'])); } $calc_total['info'] = $areaarray['area_name'] . ',首重(小于等于1千克KG) ' . $extend[0]['sprice'] . '元' . ' 续重(每千克KG) ' . $extend[0]['xprice'] . '元,总计 ' . $num . ' 千克KG'; return $calc_total; } return $calc_total; } } }