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

时间:2015-06-30 13:12:44

标签: php arrays math

我有一个包含值的数组:

$values = array(
    2,
    4,
    7.5,
    9
);

我有一个单独的值:

$total = 12;

$values中选择值的正确数学方法是什么,首先是较大的值,最后是较小的值,直到达到或接近$total的值,但从未超过?

我知道这是一个基本的数学问题,但我对数学无能为力,而且我不知道如何实现这一目标。

3 个答案:

答案 0 :(得分:1)

为您提供有效的解决方案。

<?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;
        }

    }

?>

答案 1 :(得分:1)

$minimum = 5;$maximum = 8;
$numbers= array(2,4,
7.5,
9
);
$newArray = array_filter($numbers,function ($value) use($minimum ,$maximum ) {        
    return ($value >= $minimum && $value <= $maximum );
});

答案 2 :(得分:0)

具有讽刺意味的是,我最终得到了一段相当紧凑的代码,它可以很好地解决问题 - 并且证明这不是每个人的背包问题。

$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;
}

就是这样。