public function index()
{
$num = $this->request->param('num',35);
$box = [
['id'=>1,'name'=>'小箱','num'=>20],
['id'=>2,'name'=>'中箱','num'=>40],
['id'=>3,'name'=>'大箱','num'=>60],
];
$sortAscBox = Arr::sort($box,'num',SORT_ASC);
$maxBox = $sortAscBox[count($sortAscBox)-1];
$residue = $num % $maxBox['num']; //余数
$arr = [];
//数量大于最大箱,先装大箱
if($num>=$maxBox['num']) {
$arr[$maxBox['id']] = array_merge($maxBox, [
'box_num' => intval(floor($num / $maxBox['num'])),
'residue' => 0,
]);
}
if($residue>0){
$index = Arr::findIndex(array_column($sortAscBox,'num'),$residue);
$findBox = $sortAscBox[$index];
if($findBox['id']==$maxBox['id']){ //匹配到大箱,修改余数
$arr[$maxBox['id']]['residue'] = $maxBox['num']-$residue;
}else{ //匹配到其他箱直接计算数量
$arr[$findBox['id']] = array_merge($findBox,[
'box_num' => intval(floor($residue / $findBox['num'])),
'residue' => $findBox['num']-$residue,
]);
}
}
dump($arr);exit;
}
计算数量
最新推荐文章于 2021-09-10 11:18:07 发布