Php 如何从数组中获取匹配的所有值并获取剩余值

Php 如何从数组中获取匹配的所有值并获取剩余值,php,arrays,Php,Arrays,我的问题的参考 //输入 所需费用=1.3美元; $array_result=[0.6,0.5,0.8,0.7]; //算法 $剩余=$所需; $whichtakes=[]; foreach($i=>a的数组结果){ foreach(数组\u切片($array\u result,$i+1)为$b){ $test=$required-$a-$b; 如果($test>=0和$test

我的问题的参考

//输入
所需费用=1.3美元;
$array_result=[0.6,0.5,0.8,0.7];
//算法
$剩余=$所需;
$whichtakes=[];
foreach($i=>a的数组结果){
foreach(数组\u切片($array\u result,$i+1)为$b){
$test=$required-$a-$b;
如果($test>=0和$test<$剩余){
$剩余=$测试;
$whichtakes=[$a,$b];
}
}
}
//输出
打印($whichtakes);//[0.5, 0.8]
打印(剩余);//0
多亏了特林科特


它可以很好地处理对,但变化不大,算法得到对,但我想要匹配结果数组的数组,只需要这一点变化。如果$required=1.3改为$required=1.8,现在它应该给我数组0.6,0.5,0.7,如果$required=1.9,现在它应该给我数组0.6,0.5,0.7和0.1剩余

此算法是动态规划的一部分。这是修改后的代码

$res = array();
function isSubsetSum($set, $n, $sum)
{
    if ($sum == 0)
        return true;
    if ($n == count($set) - 1 && $sum != 0)
        return false;

    if ($set[$n + 1] > $sum) {
        return isSubsetSum($set, $n + 1, $sum);
    }

    return isSubsetSum($set, $n + 1, $sum) || 
        isSubsetSum($set, $n + 1, $sum - $set[$n + 1]);
}

$set = array(0.6, 0.5, 0.8, 0.7);
$sum = 1.8;
$n = 0;
$remaining = 0;

while (!isSubsetSum($set, 0, $sum)) {
    $remaining += 0.1;
    $sum -= 0.1;
}
echo $res; // the array result
echo $remaining;
此代码不存储数组子集。可以将数组结果存储在函数中。但我不知道如何优化这个算法


有关动态编程的更多信息,请选中此复选框

我想当您更改
$required
值时,输出可能与预期不符。是的,这就是为什么需要更改此算法错误:类型1—超过30秒的最长执行时间—在第7行
$res = array();
function isSubsetSum($set, $n, $sum)
{
    if ($sum == 0)
        return true;
    if ($n == count($set) - 1 && $sum != 0)
        return false;

    if ($set[$n + 1] > $sum) {
        return isSubsetSum($set, $n + 1, $sum);
    }

    return isSubsetSum($set, $n + 1, $sum) || 
        isSubsetSum($set, $n + 1, $sum - $set[$n + 1]);
}

$set = array(0.6, 0.5, 0.8, 0.7);
$sum = 1.8;
$n = 0;
$remaining = 0;

while (!isSubsetSum($set, 0, $sum)) {
    $remaining += 0.1;
    $sum -= 0.1;
}
echo $res; // the array result
echo $remaining;