2014-04-11 53 views
1

之間的東西我有一個網絡商店的產品配置器。我必須爲每個可能的項目組合生成一個「簡單產品sku」。該物品是一個包含薯片袋的盒子。箱子可以分爲1個,2個或3個不同風味的隔間。趣味數學與php產品選取器排列組合,在

1隔間很平凡。只需重複這些口味,併爲每個口味吐出一份sku。 2個隔間仍然很簡單:只需使用組合(N選擇2)使用php Math_Combinatorials庫。

3車廂很難!

不同於2車廂選項,其中的味道必須是唯一的,有三個隔間,你可以有發言權:

燒烤,燒烤,平

但是,我們不想做一個SKU的

燒烤,燒烤,平原和平原,燒烤,燒烤

因此,這不是一個組合或排列功能了。

我的想法是生成排列,然後爲每種風味分配一個數字值,將每一行添加,如果兩行添加到相同的數字,它們是重複的組合。 只有重複的組合應該加起來相同的值。我正在考慮Unix文件系統權限的工作原理 - 讀取,寫入和執行的八進制數加起來爲八進制。有誰知道如何選擇正確的值(unix perms中的1,2,4)來完成這項工作?

想到其他方法嗎?

謝謝!

+0

有擴展Magento的支持產品捆綁,你有沒有考慮在尋找其中的一個? –

+0

我可以看到你如何得到unix權限加起來得到7的想法(如1 + 2 + 4 = 7),但實際上是使用'按位運算符'計算的。 (1 | 2 | 4)= 7權限被「添加」了。權限是用「位不是」和「位和」來「減」的,因此刪除執行位7&〜(2) == 7&5 = 5。這個原因起作用的原因是每個權限都是唯一的。也就是說,它不能像風味那樣使用多次,例如'wxx'不是一個有效的unix權限。所以這種方法不適用於你的情況。 – elitechief21

回答

0

我不知道我完全理解這個問題,但什麼:

<?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;