我有一个可以在包配置的同类产品一个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)