Created
April 22, 2014 20:30
-
-
Save jwage/11193216 to your computer and use it in GitHub Desktop.
PHP Cartesian Function
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$attributeValues = array( | |
'color' => array('Red', 'White', 'Blue'), | |
'size' => array(1, 2, 3, 4), | |
'fabric' => array('Cloth', 'Silk') | |
); | |
class Cartesian | |
{ | |
public static function build($set) | |
{ | |
if (!$set) { | |
return array(array()); | |
} | |
$subset = array_shift($set); | |
$cartesianSubset = self::build($set); | |
$result = array(); | |
foreach ($subset as $value) { | |
foreach ($cartesianSubset as $p) { | |
array_unshift($p, $value); | |
$result[] = $p; | |
} | |
} | |
return $result; | |
} | |
} | |
print_r(Cartesian::build($attributeValues)); |
btw @jwage
return CartesianProduct::build([
$this->xmlProvider()[0],
$this->validElementNameProvider()[0],
$this->invalidElementNameProvider()[0]
]);
nice one.
Here's pretty interesting implementation https://github.com/PatchRanger/cartesian-iterator
Amazing. Thanks a Ton
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
There looks to be 24 combinations; for the universe to balanced 24 must be returned. If you do not want all of them you can slice off the ones you don't want.
$array = array_slice($array, 0, 20);
or$array = array_slice($array, 4, 24);
.