做...的记录集
的每一个可能的组合,我需要写一个PHP脚本,做的东西......在一个MySQL记录的每一个可能的组合做...的记录集
例子:
产品“汽车”
选项1 :燃料
选项1倍的值:汽油,汽油
选项2:颜色
选项2个值:红,蓝,绿
选项3:门
选项3倍的值:3,5
我需要的东西做一些代码的所有选项之间的每个不可能性组合/数值对,像
组合1:汽油,红色,3
组合2:汽油,红,5
组合3:汽油,蓝,3
组合4:汽油,蓝,5
...
组合10:汽油,蓝,5
..
组合10 0:汽油,绿,5
当然,期权数量和选项值数是动态生成
我应该怎么做?
最简单的方法是对每个“选项”进行循环。此代码假定每个选项集的值已预先加载到数组中。
$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
}
}
}
非常感谢,我会根据我的代码的需要尝试两种方式并相应地更新这篇文章 – Carmine 2013-02-24 20:48:57
您对您的问题提出了什么是笛卡尔积。
如果你有一个静态数组数,你可以使用@ Moo-Juice代码,但是对于更复杂的逻辑,你必须使用大量的数组,或者即使你不知道有多少个数组会有,你可以看看this的问题,第一个答案阐述了一个算法来生成任意数量的数组的笛卡尔乘积。
另外,考虑到这是来自MySQL,您可能还会考虑让MySQL直接通过'CROSS JOIN'返回笛卡尔产品。沿着'SELECT * FROM FuelType CROSS JOIN ColorOption CROSS JOIN DoorOption'的行。 – 2013-02-24 20:43:42
非常感谢,我会根据我的代码的需要尝试两种方式并相应地更新这个帖子 – Carmine 2013-02-24 20:48:16
@Carmine我没有看到你的问题上的mysql标签,但看起来像Rickard做的,他的建议可能是最好的你在这种情况下可以这样做,主要是因为您可以将生成的笛卡尔产品委托给您的DBMS,而不是自己在代码中执行。 – asermax 2013-02-24 21:14:40
当你发布这样的内容时,人们喜欢看到你已经付出了一些努力。究竟你有试过吗? – 2013-02-24 20:43:13
嗨,实际上我没有尝试过任何东西,它是1000行php脚本的一部分,我用foreachs的数量=选项数量(我把它们放在一个表格中)来讨论嵌套的foreachs,但我想知道是否有更好的方法 – Carmine 2013-02-24 20:46:06