0

在可变数量的值中,我需要计算平均值。挑战:平均值只能是以下固定值之一(最接近的!):

$allowedAverageValues = [0.66, 1, 1.33, 1.66, 2]

我计算平均值如下:

$randomValues = [1.33, 1, 0.66, 1, 2, 1.33];
$average = array_sum($randomValues)/count($randomValues); // returns 1.22

如何识别 $allowedAverageValues 中最接近 $average 的值?所以想要的结果是1.33

4

2 回答 2

0

我想这就是你要找的:

<?php
function getClosest($search, $arr) {
   $closest = null;
   foreach ($arr as $item) {
      if ($closest === null || abs($search - $closest) > abs($item - $search)) {
         $closest = $item;
      }
   }
   return $closest;
}

$randomValues = [1.33, 1, 0.66, 1, 2, 1.33];
$average = array_sum($randomValues)/count($randomValues); // returns 1.22
$res = getClosest($average, $randomValues);

print_r($res); // returns 1.33

第一个答案中的函数在数组中查找匹配或最接近的值

于 2018-12-12T13:19:51.420 回答
0
$arr = [0.66, 1, 1.33, 1.66, 2];

function getNearest($arr,$var){
    usort($arr, function($a,$b) use ($var){

        return  abs($a - $var) - abs($b - $var);
    });
   return array_shift($arr);
}

$randomV = [1.33, 1, 0.66, 1, 2, 1.33];
$ave = array_sum($randomV)/count($randomV); 
$res = getNearest($ave, $randomV);

print_r($res);
于 2018-12-12T13:38:42.167 回答