我有一個可以在包配置的同類產品一個MySQL表:階優化PHP與MySQL
SKU PACK
xyz 25
abc 250
用戶可以選擇,我想他們在25倍數希望的項目數是能夠使用可能的最大包裝填寫訂單。例如,如果用戶想要275件產品,那麼我會用abc sku中的1件和xyz sku中的1件來填充訂單。如果用戶想要225個產品,那麼我會用9個xyz來填充訂單。
我在接近問題時遇到了問題,並且正在尋找有關方法的建議。僞代碼或PHP會很棒。
我有一個可以在包配置的同類產品一個MySQL表:階優化PHP與MySQL
SKU PACK
xyz 25
abc 250
用戶可以選擇,我想他們在25倍數希望的項目數是能夠使用可能的最大包裝填寫訂單。例如,如果用戶想要275件產品,那麼我會用abc sku中的1件和xyz sku中的1件來填充訂單。如果用戶想要225個產品,那麼我會用9個xyz來填充訂單。
我在接近問題時遇到了問題,並且正在尋找有關方法的建議。僞代碼或PHP會很棒。
這是經典bin packing problem的變體。維基百科文章提供了所有變體的大量技術背景,但這是一個相當簡單的變體。以下可能是一種好方法:
好吧,只需要找到最小的sku小於或等於產品,找出有多少sku適合產品,多個由sku包裝回答,然後從總和中減去。任何remander,循環。
$order = array();
do {
$row = $db->query("select sku,pack from table where pack = (select max(pack) from table where pack <= $products)");
$order[$row[sku]] = floor($products/$row[pack]);
$products -= $row[pack] * $order[$row[sku]]
} while($products > 0)