2016-05-20 2 views
0

Я следующий массив со следующими вызовами функций:получить наиболее близкое значение из массива вверх или вниз

$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
$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; 
} 
Смежные вопросы