【发布时间】:2022-12-06 05:01:22
【问题描述】:
我想知道解决这个问题的最佳方法是什么。我正在尝试将一个插值公式从 excel 转换为 PHP。 Excel 公式几乎是这样的:
(价值 400k - 价值 350k)/((400k - 350k)/1000)*((360k 覆盖 - 价值 350k)/1000)所有这些加上(价值 350k)
现在我在一个数组中设置了覆盖率,如下所示:
$keyFactorArray = array(
"75000" => "0.923",
"80000" => "0.938",
"85000" => "0.954",
"90000" => "0.969",
"95000" => "0.984",
"100000" => "1",
"110000" => "1.03",
"120000" => "1.061",
"130000" => "1.092",
"140000" => "1.122",
"150000" => "1.153",
"160000" => "1.208",
"170000" => "1.261",
"180000" => "1.315",
"190000" => "1.369",
"200000" => "1.422",
"250000" => "1.692",
"300000" => "1.961",
"350000" => "2.23",
"400000" => "2.499",
"450000" => "2.769",
"500000" => "3.038",
"550000" => "3.307",
"600000" => "3.577",
"650000" => "3.846",
"700000" => "4.115",
"750000" => "4.385",
"800000" => "4.654",
"850000" => "4.923",
"900000" => "5.193",
"950000" => "5.462",
"1000000" => "5.731"
);
所以我的覆盖范围可以是任何值,如 350k 或 240k 等。如何找到高于和低于的索引值。我不太确定我是否以最有效的方式解决这个问题,只是继续我目前对我面前的内容以及过去用其他代码“显示”的内容的了解。简而言之,计算最终看起来像这样:
( (2.499 - 2.23)/((2.499-2.23)/1000)*((360000 - 350000)/1000) )全部 + 2.23
我希望有人能指出正确的方向,如果使用数组是进行此计算的最有效方法,或者我应该将其放入表中并可能使用 SQL(也不是最好的...)?
【问题讨论】:
-
对于这么少的值,SQL 有点矫枉过正。只要您的数组像这样按升序排序,只需循环遍历数组并在您达到大于目标的值时立即停止。那是您的“上方”键,然后该索引减 1 是您的“下方”键。
-
只需使用这些键访问数组值并进行计算即可。
-
谢谢@AlexHowansky 我做了你说的,并会在下面显示答案!你是救星!
标签: php arrays interpolation