Iloczyn Kartezjański
Utworzone przez Marcin Dąbrowski dnia środa, 14 kwietnia 2021
Funkcja zwracająca wszystkie kombinacje z wszystkich wariantów dla produktów z zadanych tablic
Funkcja zwracająca wszystkie kombinacje z wszystkich wariantów dla produktów z zadanych tablic
Funkcja zwróci wszystkie kombinacje z x tablic podanych jako parametry. Przydatne, jeśli potrzebujemy uzyskać wszystkie kombinacje dla produktów. W przykładzie mamy 3 produkty które występują w 3 rozmiarach i chcielibyśmy zwrócić wszystkie kombinacje tych możłiwości
Wikipedia - Iloczyn Kartezjanski
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
)
)