Memory efficient Cartesian Product implementation.
It uses iterators in order to store only a specific tuple at time being able to compute even large combinations without affecting the memory footprint.
Via Composer
$ composer require th3n3rd/cartesian-product
use Nerd\CartesianProduct\CartesianProduct;
$cartesianProduct = new CartesianProduct();
$cartesianProduct
->appendSet(array('a', 'b', 'c'))
->appendSet(array('d', 'e'))
->appendSet(array('f', 'g', 'h'))
->appendSet(array('i', 'j'))
->appendSet(array('k', 'l'))
->appendSet(array('m', 'n'))
->appendSet(array('o'))
->appendSet(array('p'))
->appendSet(array('q', 'r', 's', 't'))
->appendSet(array('u', 'v', 'w'))
->appendSet(array('x', 'y'))
->appendSet(array('z'))
;
foreach ($cartesianProduct as $index => $product) {
printf("[%s] (%s)\n", $index, implode(',', $product));
}
// or (not recommended)
$result = $cartesianProduct->compute();
foreach ($result as $index => $product) {
printf("[%s] (%s)\n", $index, implode(',', $product));
}
$ phpunit
The MIT License (MIT). Please see License File for more information.