我需要從給定數組中計算與PHP中給定數字相等或更高且最接近的數字。例如:從數組中計算等於或大於給定數字的數字
號碼獲取:
6.85505196
陣列來計算:
3.11350000
4.38350000
4.04610000
3.99410000
2.86135817
0.50000000
唯一正確的組合應該是:
3.99410000 + 2.86135817 = 6.85545817
有人可以幫助我嗎?已經過了3個小時我正在發瘋!
更新:我終於完成了我的代碼如下:
$arr = array(3.1135, 4.3835, 4.0461, 3.9941, 2.86135817, 0.5);
$fetch = 6.85505196;
$bestsum = get_fee($arr, $fetch);
print($bestsum);
function get_fee($arr, $fetch) {
$bestsum = 999999999;
$combo = array();
$result = array();
for ($i = 0; $i<count($arr); $i++) {
combinations($arr, $i+1, $combo);
}
foreach ($combo as $idx => $arr) {
$sum = 0;
foreach ($arr as $value) {
$result[$idx] += $value;
}
if ($result[$idx] >= $fetch && $result[$idx] < $bestsum) $bestsum = $result[$idx];
}
return $bestsum;
}
function combinations($arr, $level, &$combo, $curr = array()) {
for($j = 0; $j < count($arr); $j++) {
$new = array_merge($curr, array($arr[$j]));
if($level == 1) {
sort($new);
if (!in_array($new, $combo)) {
$combo[] = $new;
}
} else {
combinations($arr, $level - 1, $combo, $new);
}
}
}
請您發佈您迄今嘗試過的代碼。 MCVE會改善你的問題(沒有你自己的代碼,看起來你希望我們爲你編碼)。 –
爲什麼只有3.99410000 + 2.86135817 = 6.85545817是正確的。我看到「與給定數字相等或更高」,因此上面的數組有很多合適的組合。 –
因爲6.85545817是最接近的組合,因爲有更高的組合可能沒問題,但我需要最接近的組合。其實我可以編碼最接近的數字,但它仍然遠離我的需求。 – supermoney