做...的记录集

问题描述:

的每一个可能的组合,我需要写一个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

最简单的方法是对每个“选项”进行循环。此代码假定每个选项集的值已预先加载到数组中。

$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

您对您的问题提出了什么是笛卡尔积

如果你有一个静态数组数,你可以使用@ 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