【发布时间】:2018-12-01 12:41:34
【问题描述】:
我面临一个挑战,我有三个数组,每个数组只包含数字。
我有一个函数get_sum,该函数接收2个参数,一个数组数组和一个数字。该数字是我想从每个数组中对一个或多个数字求和得到的总和,例如:
如果我有 2 个数组 [[1,2,3], [1,2,3]] 并且第二个参数是 4
该函数将返回总和为 4 的组合数。在这种情况下:
1+3 = 4
2+2 = 4
3+1 = 4
所以该函数将重新调整 int 3
我编写了下面的函数,它工作得很好,但我正在寻找一种方法来提高它的效率。目前,如果我的阵列少于 6 个,它将起作用,如果我有一百个阵列,我希望它起作用。 这里有什么数组函数可以帮到我吗?
这是代码:
<?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)
?>
如果 JavaScript 中有一个函数也很好。
谢谢
【问题讨论】:
-
既然你有一个工作功能,可能值得在codereview.stackexchange.com 上问这个问题。
标签: javascript php arrays foreach