2016-05-20 18 views
0

Ich habe das folgende Array mit der folgenden Funktion aufruft:am nächsten Wert von Array Get nach oben oder unten

$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); 

Ich habe die folgende Funktion:

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; 
} 

Die Funktion den Wert aus dem Array zurückgibt $arr, die am nächsten zu dem ist, was an sie weitergegeben wird.

Allerdings muss ich den nächsten Wert finden, der kleiner ist als der übergebene Wert und gelegentlich und der nächste Wert, der höher ist als der übergebene Wert, abhängig von meinen Bedürfnissen. Daher der dritte Parameter in der Funktion, wenn ich den nächst höheren Wert I rsort das Array finden möchte. Dies sollte theoretisch die nächsthöhere Zahl zurückgeben, jedoch gibt es tatsächlich die nächstniedrigere Zahl zurück. Kann jemand vorschlagen, warum?

$lowest_searched ist auf 1000 eingestellt, was korrekt ist.

$highest_searched bis 20000 festgelegt ist, was falsch ist, sollte es 30000.

Antwort

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; 
} 
Verwandte Themen