I am facing a challange, I have three arrays, each array contains only numbers.
I have a function get_sum
the function receives 2 parameters, an array of arrays and a number. The number is a sum I want to receive from summing one or more number from each array, for example:
If I have 2 arrays [[1,2,3], [1,2,3]]
and the second parameter is 4
the function will return the number of combinations that will sum an amount of 4. in this case:
1+3 = 4
2+2 = 4
3+1 = 4
So the function will retun the int 3
I wrote the function below, and it works great but I am looking for a way to make it more efficient. At the moment it will work if I have less than 6 arrays, I want it to work if I have a hundred arrays. Is there any array function that can help me here?
This is the code:
<?php
function get_sum ($dice, $sum) {
$sumcount = array();
$num_of_dice = count($dice);
foreach($dice[0] as $die1){
foreach($dice[1] as $die2){
if($num_of_dice == 5){
foreach($dice[2] as $die3){
foreach($dice[3] as $die4){
foreach($dice[4] as $die5){
if($die1 + $die2 + $die3+ $die4 + $die5 == $sum){
$good_res = array();
array_push( $good_res, $die1, $die2, $die3, $die4, $die5);
array_push($sumcount, $good_res);
}
}
}
}
}
if($num_of_dice == 4){
foreach($dice[2] as $die3){
foreach($dice[3] as $die4){
if($die1 + $die2 + $die3+ $die4 == $sum){
$good_res = array();
array_push( $good_res, $die1, $die2, $die3, $die4);
array_push($sumcount, $good_res);
}
}
}
}elseif ($num_of_dice == 3){
foreach($dice[2] as $die3){
if($die1 + $die2 + $die3 == $sum){
$good_res = array();
array_push( $good_res, $die1, $die2, $die3);
array_push($sumcount, $good_res);
}
}
}else{
if($die1 + $die2 == $sum){
$good_res = array();
array_push( $good_res, $die1, $die2);
array_push($sumcount, $good_res);
}
}
}
};
echo count($sumcount);
}
get_sum([[1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6]], 9)
?>
If there is a function in JavaScript it will be good as well.
Thanks