我必须得到n个数组之间的所有值组合。
以下是一个例子:
过滤器:F1,F2,F3包含值V1,V2,V3,希望的结果是以这种方式拥有大量所有可能的组合:
V1 ^ F1,V1 ^ F2
V1 ^ F1,V1 ^ F2,V1 ^ F3 ,
V1 ^ F1,V1 ^ F2,V2 ^ F3
等等。
规则是我不需要将过滤器仅中的值与其他数组的值组合。
<?php
$filterA = array('blue', 'red', 'black');
$filterB = array('s', 'm', 'l');
$filterC = array('men', 'woman');
$filters[] = $filterA;
$filters[] = $filterB;
$filters[] = $filterC;
var_dump(combinations($filters));
function combinations($arrays, $i = 0)
{
if (!isset($arrays[$i]))
{
return array();
}
// Exit Conditions;
if ($i == count($arrays) - 1)
{
return $arrays[$i];
}
// get combinations from subsequent arrays
$tmp = combinations($arrays, $i + 1);
$result = array();
// concat each array from tmp with each element from $arrays[$i]
foreach ($arrays[$i] as $v)
{
foreach ($tmp as $t)
{
$result[] = is_array($t) ? array_merge(array($v), $t) : array($v, $t);
}
}
return $result;
}
以下代码几乎产生了所需的代码,但是它错过了打印出第一个具有较少值的变体。
修改代码以获得所需结果的任何建议?