function GetCombinationsEqualToN($arr, $N, $combination) {
$sum = 0;
foreach ($combination as $num) {
$sum += $num;
}
if ($sum == $N) {
echo "sum(" . implode(", ", $combination) . ") = " . $N . "\n";
}
if ($sum >= $N) {
return;
}
for ($i = 0; $i < count($arr); $i++) {
$remaining = array();
for ($j = $i + 1; $j < count($arr); $j++) {
array_push($remaining, $arr[$j]);
}
$combination_next = [];
foreach ($combination as $num) {
$combination_next[] = $num;
}
array_push($combination_next, $arr[$i]);
GetCombinationsEqualToN($remaining, $N, $combination_next);
}
}
$arr = array(4, 6, 8, 2, 1, 10, 3, 5, 13);
$N = 13;
GetCombinationsEqualToN($arr, $N, array());
/*
run:
sum(4, 6, 2, 1) = 13
sum(4, 6, 3) = 13
sum(4, 8, 1) = 13
sum(4, 1, 3, 5) = 13
sum(6, 2, 5) = 13
sum(8, 2, 3) = 13
sum(8, 5) = 13
sum(2, 1, 10) = 13
sum(10, 3) = 13
sum(13) = 13
*/