我有一个网上商店的产品配置器。我必须为每个可能的项目组合生成一个“简单的产品sku”。这是一个盒子,里面装着一袋袋薯片。这个盒子可以分成1个,2个或3个隔间,根据不同的口味。
1个隔间是微不足道的。只需迭代每个口味,并为每个口味吐出一个sku。2划分仍然很简单:只需使用php Math_Combinatorials库的组合(N选择2)即可。
3个车厢很难!
与两个隔间的选择不同的是,口味必须是独特的,有三个隔间,你可以说:
BBQ,BBQ,普通
但是,我们不想为其创建sku
BBQ,BBQ,普通和普通,BBQ,BBQ
所以,这不再是一个组合或置换函数。
我的想法是生成排列,然后为每种口味分配一个数值,将每行相加,如果两行相加到相同的数字,则它们是重复的组合。只有重复的组合才应相加为相同的值。我从Unix文件系统权限的工作原理来考虑这个问题--读、写和执行的八进制数加起来是7。有人知道如何选择正确的值( unix perms中的1,2,4)来使其工作吗?
有没有其他的方法呢?
谢谢!
发布于 2014-04-12 02:37:25
我不知道我是否完全理解了这个问题,但是这个呢:
<?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;https://stackoverflow.com/questions/23019884
复制相似问题