根据最低和最高价格生成一系列价格中断

时间:2015-08-27 10:52:57

标签: php math

我所拥有的是一系列产品,我知道最便宜产品的价格,最贵产品的价格,以及介于两者之间的所有产品的价格。

我尝试做的是创建过滤器,并为过滤器显示一系列价格中断。

因此,例如,如果最便宜的产品是10美元而最贵的产品是100美元,我想要显示一个列表:

$10 - $30
$30 - $50
$50 - $70
$70 - $90
$90 - $100

这比听起来更复杂,因为在上面的例子中,如果最便宜的产品是10美元,但下一个最便宜的产品是40美元,那么选择10美元到30美元的选择是没有意义的。

此外,如果最便宜的产品是10美元而最贵的产品是50美元,那么你可能只想在列表中只有2或3个价格中断,而不是5个选择。同样,如果最便宜的产品是10美元,而最便宜的产品是1000美元,你之间的差异很大,你需要更大的价格优惠清单。

以下是我目前所提供的仅提供2次价格优惠且并未真正解决上述任何问题的方法

<?php

// All available unique prices sorted in order
$prices = array(10, 11, 12, 20, 21, 22, 25, 28, 29, 30, 31, 34, 35, 38, 40, 41, 42, 43, 44, 50, 51, 52, 53, 54, 55, 56, 57, 60, 61, 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 80, 81, 82, 83, 84, 85, 88, 89, 90, 91, 92, 93, 94, 96, 97, 98, 100);
$count = count($prices); // The number of unique prices
$min_price = $prices[0]; // The minimum price
$max_price = $prices[ $count - 1 ]; // The maximum price
$median_price = $prices[ (int) $count / 2 ]; // The price in the middle

echo "$min_price - $median_price\n";
echo "$median_price - $max_price\n";

?>

1 个答案:

答案 0 :(得分:0)

排序你的价格。沿着索引集定期获取元素,即您的价格集的分位数。你的中位数计算已经朝这个方向发展。要采取的分位数的数量将在前面固定,例如5或其他什么。以合适的方式围绕您找到的元素,例如,通过取其基数为10的对数,将其四舍五入为最接近的整数,使用它将其四舍五入为所有数字中的零但最重要的数字。四舍五入后丢弃相同的值。完成。