用于获取总运输尺寸的模块化功能


modular function for getting total shipping sizes

我目前正在建设的一个站点使用一家运输公司,该公司有三种不同的托盘尺寸可供运输:最大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();
       }
 }