2013-02-24 74 views
2

的每一個可能的組合,我需要寫一個PHP腳本,做的東西......在一個MySQL記錄的每一個可能的組合做...的記錄集

例子:
產品「汽車」
選項1 :燃料
選項1倍的值:汽油,汽油
選項2:顏色
選項2個值:紅,藍,綠
選項3:門
選項3倍的值:3,5

我需要的東西做一些代碼的所有選項之間的每個不可能性組合/數值對,像

組合1:汽油,紅色,3
組合2:汽油,紅,5
組合3:汽油,藍,3
組合4:汽油,藍,5
...
組合10:汽油,藍,5
..
組合10 0:汽油,綠,5

當然,期權數量和選項值數是動態生成

我應該怎麼做?

+0

當你發佈這樣的內容時,人們喜歡看到你已經付出了一些努力。究竟你有試過嗎? – 2013-02-24 20:43:13

+0

嗨,實際上我沒有嘗試過任何東西,它是1000行php腳本的一部分,我用foreachs的數量=選項數量(我把它們放在一個表格中)來討論嵌套的foreachs,但我想知道是否有更好的方法 – Carmine 2013-02-24 20:46:06

回答

0

最簡單的方法是對每個「選項」進行循環。此代碼假定每個選項集的值已預先加載到數組中。

$optionSet1 = array("Gasoline", "Petrol"); 
$optionSet2 = array("Red", "Blue", "Green"); 
$optionSet3 = array(3, 5); 

foreach($optionSet1 as $o1) 
{ 
    foreach($optionSet2 as $o2) 
    { 
     foreach($optionSet3 as $o3) 
     { 
      // Do your thing with $o1, $o2, and $o3 
     } 
    } 
} 
+0

非常感謝,我會根據我的代碼的需要嘗試兩種方式並相應地更新這篇文章 – Carmine 2013-02-24 20:48:57

1

您對您的問題提出了什麼是笛卡爾積

如果你有一個靜態數組數,你可以使用@ Moo-Juice代碼,但是對於更復雜的邏輯,你必須使用大量的數組,或者即使你不知道有多少個數組會有,你可以看看this的問題,第一個答案闡述了一個算法來生成任意數量的數組的笛卡爾乘積。

+1

另外,考慮到這是來自MySQL,您可能還會考慮讓MySQL直接通過'CROSS JOIN'返回笛卡爾產品。沿着'SELECT * FROM FuelType CROSS JOIN ColorOption CROSS JOIN DoorOption'的行。 – 2013-02-24 20:43:42

+0

非常感謝,我會根據我的代碼的需要嘗試兩種方式並相應地更新這個帖子 – Carmine 2013-02-24 20:48:16

+1

@Carmine我沒有看到你的問題上的mysql標籤,但看起來像Rickard做的,他的建議可能是最好的你在這種情況下可以這樣做,主要是因爲您可以將生成的笛卡爾產品委託給您的DBMS,而不是自己在代碼中執行。 – asermax 2013-02-24 21:14:40