使数字范围适应最小和最大的数字

时间:2012-07-10 15:53:17

标签: php logic

我有两个数字(对于这个例子,假设695是最小的,36000是最大的)。目前,一旦我知道最小值和最大值,我将差值除以10,然后循环通过循环来创建范围。它看起来像这样:

$min = (int)$min-1;
$max = (int)$max;
$diff = ($max - $min) / 10;
$range = array();
for ( $i=1; $i<10; $i++){
  $range[] = array(
    "low"=>($i==1? $min: ($i*$diff) + $min),
    "high"=>($i+1)*$diff + $min
  );
}

当数字为695-36000时,这很有用。当数字靠近时,有10个范围变得有点麻烦。例如,min为34000,max为36000,范围为34000-34200,34200-34400等。

理想情况下,如果695-36000是10个不同的范围而不是34000-36000则是一个范围。

什么是计算应显示多少范围以及这些范围应该是什么的简单方法?

1 个答案:

答案 0 :(得分:1)

这是需要考虑的事项:

$diff = ($max - $min) / 10;
$range_max = 2000;
if($diff>$range_max) $range_size = $range_max;
else $range_size = $diff;
$creep = ($max-$min-$range_size)/9-$diff;

$range = array();
for($i=0; $i<10; $i++) {
  $range[] = array (
    'low'  => (int)(($diff+$creep)*$i+$min),
    'high' => (int)(($diff+$creep)*$i+$min+$range_size)
  );  
}