我正在制定定价估算工具,based on the following array:
$items = 7;
$margins = array(
1 => 140, // Base price
3 => 120,
5 => 100,
10 => 60);
通过运行以下行,我得到最近的值:
$margin = $margins[max(array_intersect(array_keys($margins),range(0, $items)))];
echo $margin; // Outputs 100'
但是,如果此函数在每个值之间有大量空间的数组上运行,则最接近的值将远离前一个值,导致价格可能会让客户感到悲伤... < / p>
如何从中获得更精确的结果 - 例如,如果我手动填写了边距数组中的间隙,以涵盖所有潜在的项目数量(这肯定是无效的)?
由于
答案 0 :(得分:0)
您可以使用range(1, 10)
之类的内容获取所有数字的列表。然后循环并填补空白:)
答案 1 :(得分:0)
当你写1 => 140, 3 => 120, 5 => 100, 10 => 60
时,我认为你的意思是“在5到9之间,每件物品的价格为100”,所以购买7件物品的费用为7x100 = 700 。如果是这种情况,您可以简单地遍历整个阵列一次,得到每个项目的最终价格:
function get_price($prices,$real_qty)
{
foreach ($prices as $qty => $price)
if ($qty <= $real_qty) $real_price = $price;
else break;
return $real_price * $real_qty;
}
如果价格已按数量排序(例如,使用ksort
),那么此函数将返回所提供数量的总价格,只做很少的工作:在最坏的情况下,它会查看每个项目价格数组一次,你可能在该数组中只有十几个项目。
另一方面,如果您认为购买7件物品的成本应该超过700件,那么您必须解释它应该花多少钱以及成本,因为问题数据并不明显。