First, I don't know is it my question title is correct or not, I'm sorry if I make any confuse.
So I have a set of array which I need to combine on tree method to become any possible new set of array.
here is my array:
$layer = array(
array(18,19,20,21,22),
array(1,2,7,8,14),
array(3,4,9,10,15),
array(5,6,12,13,16),
array(11),
array(17)
)
what I'm expecting is combining those array value to become new set of array with tree method combination.
Array (
[0] => 18-1-3-5-11-17
[1] => 18-1-3-6-11-17
[2] => 18-1-3-12-11-17
[3] => 18-1-3-13-11-17
[4] => 18-1-3-16-11-17
[5] => 18-1-4-5-11-17
[6] => 18-1-4-6-11-17
[7] => 18-1-4-12-11-17
........
........
........
[x] => 22-14-15-16-11-17
)
As you see above, the combination could be as much as how much array values combined each other.
I can easily combine two array with below code:
$i = 0;
$arr = array();
for ($x = 0; $x < count($layer_files[$i]); $x ) {
for ($y = 0; $y < count($layer_files[($i 1)]); $y ) {
$arr[] = $layer_files[$i][$x] . '-' . $layer_files[($i 1)][$y];
}
}
$i ;
But, I have no idea how to combine more than two array as I expected above.
Hopefully you understand what I trying to ask, thank you for your help.
CodePudding user response:
You can use recursion:
function combinations($sets, $i=0) {
if ($i >= count($sets)) return [[]];
foreach($sets[$i] as $value) {
foreach(combinations($sets, $i 1) as $combi) {
$results[] = [$value, ...$combi];
}
}
return $results;
}
$matrix = combinations($layer);
// Convert each combination to a string (using "-" separator)
foreach($matrix as $combo) {
$results[] = implode("-", $combo);
}
$results
will have the desired structure.