2010-11-26 73 views
1

我在定价估计工作,这是based on the following arrayPHP:计算数组值之间的差异?

$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' 

但是,如果此功能将在操作一个在每个值之间有很大空间的数组,最接近的数值会远离前一个,导致价格可能会让客户伤心......

如何从中获得更精确的结果 - 就像我手动填写边距阵列中的空白以覆盖所有潜在项目数量(肯定效率不高)?

感谢

+0

这不应该使用某种涉及百分比的计算来表示吗? – deceze 2010-11-26 09:10:45

+0

这个计算不是一个定义的不变的百分比值...... – Industrial 2010-11-26 09:12:02

+1

@Industrial:如果你没有规则如何创建这些价格,那么我们不能帮你。例如,你可以说价格线性下降。或者二次或成指数... – NikiC 2010-11-26 09:20:45

回答

0

你可以得到所有数字的列表,像range(1, 10)。然后遍历并填补国内空白:)

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美元,那么您必须解释它应该花多少钱以及为什么,因为从问题数据来看它并不明显。