【问题标题】:Finding the low and high value inside from an array with PHP使用 PHP 从数组中查找低值和高值
【发布时间】: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


【解决方案1】:

感谢@Alex Howansky 并为我指明了正确的方向!这是帮助我用数组做数学题的代码:

foreach($keyFactorArray as $key => $value) {
  if($covA < $key) {
    $lowLimitKey = $prevKey;
    $lowLimitValue = $prevValueFactor;
    $highLimitKey = $key;
    $highLimitValue = $value;
    break;
  }
  $prevKey = $key;
  $prevValueFactor = $value;
};
$aopKeyFactor = ((($highLimitValue - $lowLimitValue) / (($highLimitKey - $lowLimitKey)/1000) * (($covA - $lowLimitKey)/1000))) + $lowLimitValue;

我确信有更好的方法来做到这一点,但这是对我来说最有意义并且有效的方法!

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 2017-07-20
    • 2013-03-22
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多