我有一个项目列表,每个项目都包含一个范围(例如:5000-10.000)
我想为这些项目制作一些过滤器(例如:5000-10.000)。
示例数据:
所以这些将是我在数据库中有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'),
)
答案 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);
答案 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
)
)