PHP:计算数组值之间的差异?

时间:2010-11-26 09:06:46

标签: php arrays diff

我正在制定定价估算工具,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>

如何从中获得更精确的结果 - 例如,如果我手动填写了边距数组中的间隙,以涵盖所有潜在的项目数量(这肯定是无效的)?

由于

2 个答案:

答案 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件,那么您必须解释它应该花多少钱以及成本,因为问题数据并不明显。