Генерация фильтров диапазона из списка диапазонов

У меня есть список предметов, и каждый из этих предметов содержит диапазон (например: 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'),
)

1

Решение

То есть вы просто хотите, чтобы фильтры разделяли все X записей? Как насчет использования цикла for для получения фильтров?

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

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

Вы также можете определить, что вы всегда хотите 5 фильтров, заменив $filterSize с $filterSize = (int)(($max - $i) / 5);

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
)

)
0

По вопросам рекламы [email protected]