【问题标题】:Algorithm for exclude combinations with unique value using php使用php排除具有唯一值的组合的算法
【发布时间】:2026-01-08 04:45:01
【问题描述】:

我正在尝试不同的值组合的算法将能够给出我精确或近似的输出值总和

我已附上详细说明的图片,我创建了列总计作为每行值的总和,最后我将所有的总值相加,整个总和值将是我的预期输出值。

所以我试图将每一行的总和组合起来,并希望得到总和值

我的算法我在下面的谷歌搜索过

function extractList($array, &$list, $temp = array()) {
    if (count($temp) > 0 && ! in_array($temp, $list))
        $list[] = $temp;
    for($i = 0; $i < sizeof($array); $i ++) {
        $copy = $array;
        $elem = array_splice($copy, $i, 1);
        if (sizeof($copy) > 0) {
            $add = array_merge($temp, array($elem[0]));
            sort($add);
            extractList($copy, $list, $add);
        } else {
            $add = array_merge($temp, array($elem[0]));
            sort($add);
            if (! in_array($temp, $list)) {
                $list[] = $add;
            }
        }
    }
}

echo "<pre>";

$sum = 32 ; //SUM
$array = array(5.14327,5.72355,5.91794,4.8209,8.69933,4.12977,4.12977,2.92791,2.36829,2.21819,1.33759,1.72278,1.72278,0.589,1.06405,0.6387,0.6387,1.68995,2.51669,3.97842,2.38058,2.17175,4.88264,5.84811,6.14215);

$list = array();

# Extract All Unique Conbinations
extractList($array, $list);

#Filter By SUM = $sum
$list = array_filter($list,function($var) use ($sum) { return(array_sum($var) == $sum);});

#Return Output
print_r($list);

Attached Image here

【问题讨论】:

  • 你的图片没有多大意义,绿色列不包含行总和。
  • 你要回应吗?

标签: php arrays algorithm sum


【解决方案1】:

您需要决定如何确定近似相等。百分比?还是绝对数量?这就是您在过滤器 lambda 函数中所需要的。

// outside lambda
$error = $sum * 5 / 100;// 5%, or
$error = 0.02;// an absolute
...
// inside lambda
return abs(array_sum($var) - $sum) <= $error;

【讨论】: