2012-02-13 40 views
0

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

也许我只是要对此完全错误的方式?

回答

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

} 
+0

数据将在一个表中,它不是托盘权重的数组/结果集我担心编辑,它是计算我不想编辑的配置的函数。 – user813720 2012-02-13 10:38:23

+0

检查我上面包含的代码 – denil 2012-02-13 10:51:13

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); 
+1

不要将count($ sizes)添加到for循环中。它会使脚本变慢,每次循环被调用时它也会调用count函数。只需在循环外部为count创建一个变量$ total_number_sizes = $ count($ sizes)然后为($ i = 0; $ i <$ total_number_sizes; ++ $ i)[注意:将++放在变量之前也会让脚本编译得更快] – denil 2012-02-13 10:54:07

+0

试试我在上面的答案中提供的那个,看看它是否适用于你 – denil 2012-02-13 10:54:58

+0

是的,你是对的我不应该在每个循环上执行count()函数。不知道在迭代之前放置++,谢谢。顺便说一句,你的代码下面是一个无休止的循环......不过谢谢 – user813720 2012-02-13 11:11:23