我有一个包含值的数组:
$values = array(
2,
4,
7.5,
9
);
我有一个单独的值:
$total = 12;
从$values
中选择值的正确数学方法是什么,首先是较大的值,最后是较小的值,直到达到或接近$total
的值,但从未超过?
我知道这是一个基本的数学问题,但我对数学无能为力,而且我不知道如何实现这一目标。
答案 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;
}
就是这样。