我试图在几个数组中找到所有项目的组合.
数组的数量是随机的(可以是2,3,4,5 ……).
每个数组中的元素数量也是随机的……
例如,我有3个数组:
$arrayA = array('A1','A2','A3');
$arrayB = array('B1','B2','B3');
$arrayC = array('C1','C2');
我想生成一个3 x 3 x 2 = 18种组合的数组:
> A1,B1,C1
> A1,B1,C2
> A1,B2,C1
> A1,B2,C2
> A1,B3,C1
> A1,B3,C2
> A2,B1,C1
> A2,B1,C2
…
问题是创建一个具有可变数量的源数组的函数…
解决方法:
这是递归解决方案:
function combinations($arrays, $i = 0) {
if (!isset($arrays[$i])) {
return array();
}
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;
}
print_r(
combinations(
array(
array('A1','A2','A3'),
array('B1','B2','B3'),
array('C1','C2')
)
)
);