我目前正在建设的一个站点使用一家运输公司,该公司有三种不同的托盘尺寸可供运输:最大250公斤、最大500公斤和最大1000公斤。
虽然我已经建立了一个功能来获得总重量所需的托盘配置,但它有点硬编码,如果我以后再增加一个托盘重量或在另一个项目中使用相同的功能,我正在寻找一种更模块化的方法来解决这个问题。
我有这个:
$sizes = array(
array('desc'=>'large','limit'=>1000),
array('desc'=>'medium','limit'=>500),
array('desc'=>'small','limit'=>250)
);
foreach ($sizes as $k=>$v) {
$pallets[$v['desc']] = 0;
}
echo $total_weight = 2280;
echo "<hr />";
function pallet_size($weight) {
global $sizes, $pallets;
if ($weight > $sizes[1]['limit']) {
$pallets[$sizes[0]['desc']]+=1;
$weight-=$sizes[0]['limit'];
pallet_size($weight);
} elseif ($weight > $sizes[2]['limit']) {
$pallets[$sizes[1]['desc']]+=1;
$weight-=$sizes[1]['limit'];
pallet_size($weight);
} elseif ($weight < $sizes[2]['limit'] && $weight>0) {
$pallets[$sizes[2]['desc']]+=1;
$weight-=$sizes[2]['limit'];
pallet_size($weight);
} elseif ($weight<=0) {
print_r($pallets);
exit();
}
}
pallet_size($total_weight);
也许我只是走错了路?
我现在已经解决了这个问题:
$sizes = array(
array('desc'=>'large','limit'=>1000),
array('desc'=>'medium','limit'=>500),
array('desc'=>'small','limit'=>250),
array('desc'=>'parcel','limit'=>25)
);
foreach ($sizes as $k=>$v) {
$pallets[$v['desc']] = 0;
}
echo $total_weight = 1023;
echo "<hr />";
function pallet_size($weight) {
global $sizes, $pallets;
for ($i=0;$i<count($sizes);$i++) {
if ($i==(count($sizes)-1)) {
if ($weight < $sizes[$i]['limit'] && $weight>0) {
$pallets[$sizes[$i]['desc']]+=1;
$weight-=$sizes[$i]['limit'];
pallet_size($weight);
} elseif ($weight<=0) {
print_r($pallets);
exit();
}
} else {
if ($weight > $sizes[($i+1)]['limit']) {
$pallets[$sizes[$i]['desc']]+=1;
$weight-=$sizes[$i]['limit'];
pallet_size($weight);
} elseif ($weight<=0) {
print_r($pallets);
exit();
}
}
}
}
pallet_size($total_weight);
为什么不创建一个表,以便将来添加额外的重量信息。如果需要,只需查询数据即可。通过这种方式,你可以很容易地添加/编辑/删除权重,而不必编辑你的代码
试试这个代码:
foreach($sizes as $key => $value){
if($weight > $value[$key]['limit']){
$pallets[$value[$key]['desc'] += 1;
$weight -= $value[$key]['limit'];
pallet_size($weight);
}else if ($weight < $value[$key]['limit']){
$pallets[$value[$key]['desc'] += 1;
$weight -= $value[$key]['limit'];
pallet_size($weight);
}else if ($weight <= 0){
print_r($pallets);
exit();
}
}