Funkcja zwróci wszystkie kombinacje z N tablic
function arrayCartesianFromArrays(array $arrays)
{
$result = [];
$arrays = array_values($arrays);
$sizeIn = sizeof($arrays);
$size = $sizeIn > 0 ? 1 : 0;
foreach ($arrays as $array) {
$size = $size * sizeof($array);
}
for ($i = 0; $i < $size; $i ++) {
$result[$i] = array();
for ($j = 0; $j < $sizeIn; $j ++) {
array_push($result[$i], current($arrays[$j]));
}
for ($j = ($sizeIn - 1); $j >= 0; $j --) {
if (next($arrays[$j])) {
break;
} elseif (isset($arrays[$j])) {
reset($arrays[$j]);
}
}
}
return $result;
}
// Use example
$arrays = [
['Product1', 'Product2','Product3'],
['red', 'green','blue'],
['L','XL','XXL'],
];
$output = arrayCartesianFromArrays($arrays);
print_r($output);
Array
(
[0] => Array
(
[0] => Product1
[1] => red
[2] => L
)
[1] => Array
(
[0] => Product1
[1] => red
[2] => XL
)
[2] => Array
(
[0] => Product1
[1] => red
[2] => XXL
)
[3] => Array
(
[0] => Product1
[1] => green
[2] => L
)
[4] => Array
(
[0] => Product1
[1] => green
[2] => XL
)
[5] => Array
(
[0] => Product1
[1] => green
[2] => XXL
)
[6] => Array
(
[0] => Product1
[1] => blue
[2] => L
)
[7] => Array
(
[0] => Product1
[1] => blue
[2] => XL
)
[8] => Array
(
[0] => Product1
[1] => blue
[2] => XXL
)
...
[25] => Array
(
[0] => Product3
[1] => blue
[2] => XL
)
[26] => Array
(
[0] => Product3
[1] => blue
[2] => XXL
)
)