Get all subsets of array
If you have a list of items (for example):
$arr = array( 1 => null, 2 => 1, 3 => 2, 4 => 3, 5 => 3);
And you need all subsets of item index 1
:
1 -> 2, 3, 4, 5 2 -> 3, 4, 5 3 -> 4, 5 4 -> 5 ->
Our desired function:
function allSubsets($arr) { $result = array(); foreach ($arr as $key => $value) { if ($value) { $result[$value][] = $key; $tmpResult = $result; foreach ($tmpResult as $index => $list) { if ($index >= $key) { break; } foreach ($list as $i => $j) { if ($value == $j) { $result[$index][] = $key; } } } } } return $result; }
Example:
$arr = array( 1 => null, 2 => 1, 3 => 2, 4 => 3, 5 => 3); print_r(allSubsets($arr));
Result:
Array ( [1] => Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 ) [2] => Array ( [0] => 3 [1] => 4 [2] => 5 ) [3] => Array ( [0] => 4 [1] => 5 ) )