从阵列向上或向下获取最接近的值

时间:2016-05-20 11:24:53

标签: php sorting

我有以下函数调用的以下数组:

$monetary_break_points = array( 
                                    10000, 
                                    20000, 
                                    30000,
                                    40000, 
                                );

$lowest_searched =  get_closest(1200,$monetary_break_points,0);
$highest_searched = get_closest(24000,$monetary_break_points,1);

我有以下功能:

function get_closest($search, $arr, $sort) {
    if($sort == 1){
        rsort($arr);
    }
    else {
        sort($arr);
    } 

   $closest = null;
   foreach ($arr as $item) {
      if ($closest === null || abs($search - $closest) > abs($item - $search)) {
         $closest = $item;
      }
   }
   return $closest;
}

该函数返回数组$arr中最接近传递给它的值。

但是,我需要找到最接近的值,该值小于传入的值和有时传递的值,并且最接近的值高于传入的值,具体取决于我的需要。因此,函数中的第三个参数,如果我想找到最接近的较高值I rsort数组。理论上,这应该返回最接近的较高数字,但实际上它确实返回最接近的较低数字。谁有人建议为什么?

$lowest_searched设置为1000,这是正确的。

$highest_searched设置为20000,这是不正确的,它应该是30000。

1 个答案:

答案 0 :(得分:1)

$monetary_break_points = array( 
                                    10000, 
                                    20000, 
                                    30000,
                                    40000, 
                                );

echo '<br/><br/>lowest_searched'.$lowest_searched =  get_closest(1200,$monetary_break_points,0);
echo '<br/>highest_searched'.$highest_searched = get_closest(24000,$monetary_break_points,1);

function get_closest($search, $arr, $sort) {
    if($sort == 1){
        rsort($arr);
    }
    else {
        sort($arr);
    } 

   $closest = null;
   foreach ($arr as $item) {
       if($sort == 0)
       {
        if ($closest === null || abs($search - $closest) > abs($item - $search)) {
             $closest = $item;
        }
       }

       if($sort == 1)
       {
           if($search < $item )
               $closest = $item;
       }       
   }
   return $closest;
}