Php 此函数需要正确的数组计算

Php 此函数需要正确的数组计算,php,arrays,algorithm,function,loops,Php,Arrays,Algorithm,Function,Loops,这里是我的算法要求找到捐赠者id的总和捐赠 等于所需捐款 <?php function magicalFunction($donationArray , $expactedValue ){ /*need some algorithm get key of elements from $donationArray which sum is equal to $expactedValue $*/ } $userDonation = array( '1' =&

这里是我的算法要求找到捐赠者id的总和捐赠 等于所需捐款

<?php

function magicalFunction($donationArray , $expactedValue ){
    /*need some algorithm get key of elements from $donationArray which sum is   
    equal to $expactedValue  $*/
}

$userDonation = array(
    '1' => 100,
    '4' => 8064,
    '5' => 578,
    '6' => 752,
    '21' => 512,
    '121' => 660,
    '152' => 135,
    '199' => 1350
);

$requiredDonation = 886;
$selectedDonatee = magicalFunction( $userDonation , $requiredDonatee ); 
// return false

$requiredDonation = 1465;
$selectedDonatee = magicalFunction( $userDonation , $requiredDonatee ); 
// return array(5, 6, 152);

?>
这是最重要的,也是最重要的

。。。给定一组整数和一个整数s,是否有任何非空子集和s

在这里:

$requiredDonation是s $usergeneration是一组整数 magicalFunction返回求和为s的整数集的子集。正确NP完全问题的正确答案为非错误答案,错误答案为错误答案 为子集和问题提供了一些解决方案,谷歌搜索提供了其他解决方案

这是一个建议。 是基于PHP的解算器。
您可能还希望评估需求,因为如果要搜索的捐赠数量很大,问题可能会失控。这是NP完全问题的一个性质。它们可能需要很长时间才能精确求解。

这里有一种方法。对于较大的输入阵列,这会很慢,但在理论上是可行的。此外,这将返回第一个键组合,其值与它找到的目标值之和,并且将忽略任何其他可能的组合

function findSet($values, $target, $keys = [], $sum = 0) {

    while ($k = key($values)) {
        $v = reset($values);

        // return the current set of keys if the target sum is found
        if ($sum + $v == $target) return array_merge($keys, [$k]);

        // remove the current value
        unset($values[$k]);

        // recursively test the remaining values and return if a matching set is found
        if ($sum + $v < $target) {
            $test = findSet($values, $target, array_merge($keys, [$k]), $sum + $v);
            if ($test) return $test;
        }
    }

    // return false if no matching sets are found
    return false;
}

$result = findSet($userDonation, 1465);

我不知道你想要什么,你能给我一个使用你自己的数组的例子吗?我几乎可以保证有更好的方法来完成你正在做的事情。您想将数组值之和等于传递给函数的int值吗?那么,您自己是否尝试过任何方法,或者这只是一个需求规范。您希望我们在哪里为您构建它?更新的格式