Skip to content

Instantly share code, notes, and snippets.

@kpodemski
Forked from farinspace/combos.php
Created February 4, 2021 11:56
Show Gist options
  • Save kpodemski/ad385b5583c55e5bcce88ab88f08e0ff to your computer and use it in GitHub Desktop.
Save kpodemski/ad385b5583c55e5bcce88ab88f08e0ff to your computer and use it in GitHub Desktop.
Recursive functions, I can never find exactly what I need in a pinch
<?php
function combos($data, &$all = array(), $group = array(), $val = null, $i = 0) {
if (isset($val)) {
array_push($group, $val);
}
if ($i >= count($data)) {
array_push($all, $group);
} else {
foreach ($data[$i] as $v) {
combos($data, $all, $group, $v, $i + 1);
}
}
return $all;
}
$data = array(
array('a', 'b'),
array('e', 'f', 'g'),
array('w', 'x', 'y', 'z'),
);
$combos = combos($data);
echo '<pre>'; print_r($combos); echo '</pre>';
Array
(
[0] => Array
(
[0] => a
[1] => e
[2] => w
)
[1] => Array
(
[0] => a
[1] => e
[2] => x
)
[2] => Array
(
[0] => a
[1] => e
[2] => y
)
[3] => Array
(
[0] => a
[1] => e
[2] => z
)
[4] => Array
(
[0] => a
[1] => f
[2] => w
)
[5] => Array
(
[0] => a
[1] => f
[2] => x
)
[6] => Array
(
[0] => a
[1] => f
[2] => y
)
[7] => Array
(
[0] => a
[1] => f
[2] => z
)
[8] => Array
(
[0] => a
[1] => g
[2] => w
)
[9] => Array
(
[0] => a
[1] => g
[2] => x
)
[10] => Array
(
[0] => a
[1] => g
[2] => y
)
[11] => Array
(
[0] => a
[1] => g
[2] => z
)
[12] => Array
(
[0] => b
[1] => e
[2] => w
)
[13] => Array
(
[0] => b
[1] => e
[2] => x
)
[14] => Array
(
[0] => b
[1] => e
[2] => y
)
[15] => Array
(
[0] => b
[1] => e
[2] => z
)
[16] => Array
(
[0] => b
[1] => f
[2] => w
)
[17] => Array
(
[0] => b
[1] => f
[2] => x
)
[18] => Array
(
[0] => b
[1] => f
[2] => y
)
[19] => Array
(
[0] => b
[1] => f
[2] => z
)
[20] => Array
(
[0] => b
[1] => g
[2] => w
)
[21] => Array
(
[0] => b
[1] => g
[2] => x
)
[22] => Array
(
[0] => b
[1] => g
[2] => y
)
[23] => Array
(
[0] => b
[1] => g
[2] => z
)
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment