从范围列表生成范围过滤器

时间:2014-10-20 12:40:39

标签: php arrays logic

我有一个项目列表,每个项目都包含一个范围(例如:5000-10.000)

我想为这些项目制作一些过滤器(例如:5000-10.000)。

示例数据:

  • 5000 - 10000
  • 5000 - 15000
  • 16000 - 26000
  • 24000 - 60000
  • 1000000 - 6000000

所以这些将是我在数据库中有5个项目的范围。

我希望有以下过滤器5000 - 10000,10000 - 15000,15000 - 16000等(这是我的方法,并没有完全按照我的意愿工作,因为如果那里有很多项目将是一个过滤器。)

所需的输出将是4-5个过滤器(这是针对此当前数据集,有时可能页面上有一个项目)可用于当前页面中的所有项目。如果可能,过滤器的数量应该是动态的。

编程语言并不是一个真正的问题,我认为这更像是一个数学问题,而不是编程问题。这可能会以多种编程语言实现。

如果可能的话,我很乐意看到javascript或php方法,但如果没有,请解释逻辑部分。

PS。我只需要知道如何生成这些过滤器,实际的过滤部分是不必要的。

如果您有任何疑问或者不明白我想要达到的目的,请随时提出。

编辑:

数据只是一个简单的键值数组,每个项目都有一个包含最小 - 最大值的数组。

array(
    array('min'=>'5000','max'=>'10000'),
    array('min'=>'5000','max'=>'15000'),
    array('min'=>'14000','max'=>'15000'),
    array('min'=>'1200000','max'=>'5000000'),
    array('min'=>'500000','max'=>'800000'),
    array('min'=>'18000','max'=>'170000'),
)

2 个答案:

答案 0 :(得分:0)

所以你只想让过滤器分割每个X记录?如何使用for循环来获取过滤器?

$i = getLowestPossibleValueFromDB();
$max = getHighestPossibleValueFromDb();
$filterSize = 5000;

$filters = array();
for($i; $i <= $max; $i += $filterSize) {
    filters[] = array('from' => $i, 'to' => $i + $filterSize - 1);
}

您还可以通过将$filterSize替换为$filterSize = (int)(($max - $i) / 5);

来定义总是需要5个过滤器

答案 1 :(得分:0)

我希望我能正确理解你的问题。你可以在php中尝试这样:

$array = array(array('min'=>'5000','max'=>'10000'),array('min'=>'5000','max'=>'15000'),array('min'=>'5000','max'=>'35000'));

$no_of_filters = count($array);

$max_numbers = array();
$min_numbers = array();
foreach($array as $arr)
{
    $max_numbers[] = $arr['max'];
    $min_numbers[] = $arr['min'];
}
$max = max($max_numbers);
$min = min($min_numbers);

$step = ceil(($max - $min) / $no_of_filters);

$result = array();

while($min < $max){

    $max_step = $min + $step;

    if($max_step > $max)
        $max_step = $max;

    $result[] = array(
                    'min' => $min,
                    'max' => $max_step, 
            );
    $min = $max_step;

}



echo '<pre>';
print_r($array);
echo '</pre>';

echo '<pre>';
print_r($result);
echo '</pre>';

<强>结果:

Array
(
   [0] => Array
      (
          [min] => 5000
          [max] => 10000
      )

   [1] => Array
      (
          [min] => 5000
          [max] => 15000
      )

   [2] => Array
      (
          [min] => 5000
          [max] => 35000
      )

 )

/****************************/
Array
(
  [0] => Array
      (
          [min] => 5000
          [max] => 12500
      )

  [1] => Array
      (
          [min] => 12500
          [max] => 20000
      )

  [2] => Array
      (
          [min] => 20000
          [max] => 27500
      )

  [3] => Array
      (
          [min] => 27500
          [max] => 35000
      )

  )