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

时间:2012-02-13 09:53:53

标签: php

我目前正在建造的网站使用的运输公司有三种不同的托盘尺寸可供运输:最大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);

也许我只是完全以错误的方式解决这个问题?

2 个答案:

答案 0 :(得分:0)

为什么不创建一个允许您以后添加其他重量信息的表格。只需查询数据即可。通过这种方式,您可以轻松添加/编辑/删除权重,而无需编辑代码

尝试以下代码:

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();
       }

 }

答案 1 :(得分:0)

我现在已经解决了这个问题:

$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);