我正在查看一些成本信息,我需要一种显示所有组合的好方法。我不确定是否必须使用嵌套的foreach
循环或其他。通过一组数据的最佳方法
我有25个不同的项目。 物品1 - ITEM2 .. 项目25
我有一个在我的项目建设使用了6个螺栓。 bolt1 - bolt2 - bolt3 - bolt4 - bolt5 - bolt6每个螺栓具有不同的成本。
所有项目只能使用一个类型的螺栓。不是混合物,像3号螺栓1和3号螺栓。
- 25件物品中的7件需要6个螺栓。
- 其余6个需要5个螺栓。
- 其余3个需要4个螺栓。
- 其余5个需要3个螺栓。
- 其余3个需要2个螺栓。
- 最后1个需要1个螺栓。
这里是棘手的地方。
每个项目与他们的螺栓数量需要4个附件包中的一个具有不同的成本。
ACC1 - ACC2 - ACC3 - ACC4
每个项目也需要4盒填充之一。每次,具有不同的成本
stuffer1 - stuffer3 - stuffer3 - stuffer4
最后,每个项目需要3个包装之一。每个都有不同的成本。
wrapper1 - wrapper2 - wrapper3
我需要PHP给我的价格每一种可能的组合,例如。
foreach 6 bolt item{
(6 bolt1 * $cost) + ($acc1Cost + $stuffer1Cost + $wrapper1Cost) = item1acc1stff1wra1COST
(6 bolt1 * $cost) + ($acc2Cost + $stuffer1Cost + $wrapper1Cost) = item1acc2stff1wra1COST
(6 bolt1 * $cost) + ($acc3Cost + $stuffer1Cost + $wrapper1Cost) ..
(6 bolt1 * $cost) + ($acc4Cost + $stuffer1Cost + $wrapper1Cost) ..
(6 bolt1 * $cost) + ($acc1Cost + $stuffer2Cost + $wrapper1Cost) ..
(6 bolt1 * $cost) + ($acc1Cost + $stuffer3Cost + $wrapper1Cost)
(6 bolt1 * $cost) + ($acc1Cost + $stuffer4Cost + $wrapper1Cost)
(6 bolt1 * $cost) + ($acc1Cost + $stuffer1Cost + $wrapper2Cost)
(6 bolt1 * $cost) + ($acc1Cost + $stuffer1Cost + $wrapper3Cost)
(6 bolt2 * $cost) + ($acc1Cost + $stuffer1Cost + $wrapper3Cost)
(6 bolt2 * $cost) + ($acc1Cost + $stuffer1Cost + $wrapper3Cost)
..... all combinations
foreach 5 bolt item{
(5 bolts * $cost) + (**$acc1Cost** + **$stuffer1Cost** **$wrapper1Cost**)
(5 bolts * $cost) + (**$acc2Cost** + **$stuffer1Cost** **$wrapper1Cost**)
(5 bolts * $cost) + (**$acc3Cost** + **$stuffer1Cost** **$wrapper1Cost**)
(5 bolts * $cost) + (**$acc4Cost** + **$stuffer1Cost** **$wrapper1Cost**)
..so on to the end..
}
每种类型的物品都按不同的数组进行分类,这些数组按照它们需要的螺栓数来划分。
$oneBolt = array(
bolt1 => cost,
...
);
每个其他项目组都保存在它们各自的价格数组中。
我意识到我可以写出像上面这样的所有组合,但我该如何使用循环来做到这一点?以这种或那种方式做它是否聪明? PHP是否有这样的内置函数?请,任何洞察力,你可以提供表示赞赏。还有另外一种方法我应该这样做吗?
我可能需要指出的是,价格被拉到另一个网站的卷曲刮。目标是找到价格最低的组合以触发另一个步骤,那就是需求的程度。我不知道这是否会改变你的答案,但我认为这是相关的。我正在研究MVC的东西,但我不确定。 – KiloJKilo 2012-08-11 23:29:50
我已经发布了一个替代答案,只使用数组。看看它是否符合你的想法。 – pixeline 2012-08-11 23:44:40