2012-02-13 42 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