Php 确定数组中值的最大部分以匹配给定值

Php 确定数组中值的最大部分以匹配给定值,php,arrays,math,Php,Arrays,Math,我有一个包含值的数组: $values = array( 2, 4, 7.5, 9 ); 我有一个单独的值: $total = 12; 从$values中选择值的正确数学方法是什么,较大的值排在第一位,较小的值排在最后,直到达到或接近$total的值,但从未超过 我知道这是一道基本的数学题,但我的数学能力相当差,我不知道如何完成这道题。有一个可行的解决方案给你 <?php $values = array( 2, 4

我有一个包含值的数组:

$values = array(
    2,
    4,
    7.5,
    9
);
我有一个单独的值:

$total = 12;
$values
中选择值的正确数学方法是什么,较大的值排在第一位,较小的值排在最后,直到达到或接近
$total
的值,但从未超过


我知道这是一道基本的数学题,但我的数学能力相当差,我不知道如何完成这道题。

有一个可行的解决方案给你

<?php
    $values = array(
        2,
        4,
        1.5,
        1,
        3,
        5
    );

    $total = 12;
    rsort($values);
    $newarray = array();
    foreach($values as $key)
    {
        if(array_sum($newarray) == $total)
        {
            array_pop($newarray);
            break;
        }
        else if(array_sum($newarray) > $total)
        {
            break;
        }
        else
        {
            $newarray[] = $key;
        }

    }

?>



$newArray=array\u filter($numbers,function($value)use($minimum,$maximum){

return($value>=$minimum&&$value具有讽刺意味的是,我最终得到了一段相当紧凑的代码,它漂亮地解决了这个问题,并且证明了这不是每个sé的背包问题

$total = 7.9;
$values = array(2, 2.5, 5, 8);
$computed = 0;

rsort($values);

foreach($values as $val) {
    if($val + $computed > $total)
        continue;
    $computed += $val;
}

就是这样。

你要求的是解决背包问题,请参阅,例如,了解更多详细信息。可能重复感谢否决票。由于不知道任何关键字,我应该如何在成堆的数百万中找到这些解决方案。我将看看这是否正是我要寻找的。显然背包问题"这是一个夸张的版本,使事情变得过于复杂。如果答案中提供的解释对我有帮助,我本来就不需要问这个问题。我喜欢人们在没有调查的情况下进行判断。谢谢你,迪本。我必须调查一下,但它看起来不错。我在这段代码中看到的是,结果是rray值可能会超过
$value
,但这很容易更改。我的坏消息是,我读错了。我认为可以使用相等的值,但我想这是一个小问题。相等,是的,但不超过。但仍然感谢添加:)
$numbers= array(2,4,
7.5,
9
);
$newArray = array_filter($numbers,function ($value) use($minimum ,$maximum ) {        
    return ($value >= $minimum && $value <= $maximum );
});
$total = 7.9;
$values = array(2, 2.5, 5, 8);
$computed = 0;

rsort($values);

foreach($values as $val) {
    if($val + $computed > $total)
        continue;
    $computed += $val;
}