Next related number

Returns the next higher or lower number in a given range.

// Returns the next higher or lower number
function NextRelatedNumber($number, $range){    
    $r = $number % $range;
    $f = $number - $r;
    $b = round($r / $range, 0);
 
    return ($b == 1) ? $f + $range : $f;    
}
 
// Returns the next higher number
function NextHigherNumber($number, $range){    
    $r = $number % $range;
    $f = $number - $r;
    $b = ceil($r / $range);
 
    return ($b == 1) ? $f + $range : $f;    
}
 
// Returns the next lower number
function NextLowerNumber($number, $range){    
    $r = $number % $range;
    $f = $number - $r;
    $b = floor($r / $range);
 
    return ($b == 1) ? $f + $range : $f;    
}
 
// Returns the next related number from an array
function NextNumberArray($Number, $NumberRangeArray){
 
    $w = 0;
    $c = -1;
    $abstand = 0;
 
    $l = count($NumberRangeArray);        
    for($pos=0; $pos < $l; $pos++){
 
        $n = $NumberRangeArray[$pos];
 
        $abstand = ($n < $Number) ? $Number - $n : $n - $Number;
 
        if ($c == -1){
            $c = $abstand;
            continue;
        }
        else if ($abstand < $c){
            $c = $abstand;
            $w = $pos;
        }
    }
 
    return $NumberRangeArray[$w];
}
 
 
// Examples
// --------
 
// 0 10 20 30 40 50 ...
print 'NextRelatedNumber: ';
print NextRelatedNumber(44, 10) . "\n";
// returns --> 40
 
// 0 20 40 60 80 100 ...
print 'NextHigherNumber: ';
print NextHigherNumber(41, 20) . "\n";
// returns --> 60
 
// 0 5 10 15 20 25 30 35 ...
print 'NextLowerNumber: ';
print NextLowerNumber(57, 5) . "\n";
// returns --> 55
 
// Example with Array
print 'NextNumberArray: ';
print NextNumberArray(45, array(3, 8, 19, 34, 56, 89)) . "\n";
// returns --> 34
// (45 is between 34 and 56 but 34 is the next)
Snippet Details



See below

Sorry folks, comments have been deactivated for now due to the large amount of spam.

Please try to post your questions or problems on a related programming board, a suitable mailing list, a programming chat-room,
or use a QA website like stackoverflow because I'm usually too busy to answer any mails related
to my code snippets. Therefore please just mail me if you found a serious bug... Thank you!


Older comments:

None.