php产品选择器的有趣数学-排列,组合,介于两者之间的东西


Fun Math with php product picker- permutations, combinations, something in between

我有一个用于web商店的产品配置程序。我必须为每个可能的项目组合生成一个"简单产品sku"。这是一个装薯片的盒子。盒子可以分为1、2或3个隔间,用于不同的口味。

1个隔间是微不足道的。只需迭代各种口味,并为每种口味吐出一个sku。2个隔间仍然很容易:只需使用php Math_Combinationals库使用组合(N选择2)。

3个隔间很难!

与口味必须独特的2个隔间不同,有三个隔间,你可以说:

BBQ,BBQ,普通

然而,我们不想为制作sku

烧烤,烧烤,平原和平原,烧烤,烧烤

因此,这不再是一个组合或置换函数。

我的想法是生成排列,然后为每种口味分配一个数值,将每一行相加,如果两行相加到同一个数字,它们就是重复的组合。只有重复的组合才能加起来达到相同的值。我是从Unix文件系统权限的工作方式来考虑这一点的——读、写和执行的八进制数字加起来就是7。有人知道如何选择正确的值(unix perms中的1,2,4)来实现这一点吗?

还有其他方法吗?

谢谢!

我不知道我是否完全理解这个问题,但这个呢:

<?php
//Generate fake combo
$choices = array('bbq', 'plain', 'one', 'two', 'three');
$combo = array();
$total = rand(1,6);
for ($x = 1; $x <= $total; $x++) {
    $combo[] = $choices[array_rand($choices)];
}
var_dump($combo);
//Make SKU
$combo = array_unique($combo);
sort($combo);
$sku = implode('-', $combo);
echo $sku;