将数字解析为特定组

Resolving a number to a specific group

我正在制作一个用于计算道路税数据的 Web 应用程序。为此,价格可以取决于车辆的重量。

我收到的数据是这样的:

array (
  1 => 
  array (
    'quarterly' => 57,
    'yearly' => 228,
  ),
  12000 => 
  array (
    'quarterly' => 62,
    'yearly' => 248,
  ),
  13000 => 
  array (
    'quarterly' => 68,
    'yearly' => 272,
  ),
  14000 => 
  array (
    'quarterly' => 74,
    'yearly' => 296,
  ),
  15000 => 
  array (
    'quarterly' => 79,
    'yearly' => 316,
  ),
  16000 => 
  array (
    'quarterly' => 85,
    'yearly' => 340,
  ),
  17000 => 
  array (
    'quarterly' => 91,
    'yearly' => 364,
  ),
  18000 => 
  array (
    'quarterly' => 97,
    'yearly' => 388,
  ),
  19000 => 
  array (
    'quarterly' => 102,
    'yearly' => 408,
  ),
  20000 => 
  array (
    'quarterly' => 108,
    'yearly' => 432,
  ),
  21000 => 
  array (
    'quarterly' => 114,
    'yearly' => 456,
  ),
  22000 => 
  array (
    'quarterly' => 119,
    'yearly' => 476,
  ),
  23000 => 
  array (
    'quarterly' => 125,
    'yearly' => 500,
  ),
  24000 => 
  array (
    'quarterly' => 131,
    'yearly' => 524,
  ),
  25000 => 
  array (
    'quarterly' => 137,
    'yearly' => 548,
  ),
  26000 => 
  array (
    'quarterly' => 142,
    'yearly' => 568,
  ),
  27000 => 
  array (
    'quarterly' => 148,
    'yearly' => 592,
  ),
  28000 => 
  array (
    'quarterly' => 154,
    'yearly' => 616,
  ),
  29000 => 
  array (
    'quarterly' => 159,
    'yearly' => 636,
  )
);

数字(数组中的第一项,11051115112511351、1451, 等) 是重量classes,我需要检查用户的车辆重量并检查它属于哪个重量class。

比如我有一辆600KG的车,这辆车属于重量class 1.

如果我有一个重量为1150 KG的例子,它属于重量class 1051

为了计算这个,我使用这个方法:

public static function resolveWeightClass(array $data, $vehicleWeight) {
    $weightClasses = array_keys($data);
    for ($weightClassIndex = 0; $weightClassIndex < count($weightClasses); $weightClassIndex++) {
        $weightClass = $weightClasses[$weightClassIndex];

        if ($weightClass < $vehicleWeight) {
            continue;
        }
        return $weightClass;
    }
    return 0;
}

问题

当我运行这个代码,并且车辆是例如16500 KG的,代码仍然选择17000重量class,当我需要16000体重class.

问题

我如何编写我的代码,以便它会选择正确的权重 class 以防它后面的权重 class。

试试这个方法:

public static function resolveWeightClass(array $data, $vehicleWeight) {
    $weightClasses = array_keys($data);
    sort($weightClasses);
    for($i = 0; $i < count($weightClasses) - 1; $i++) {
        if($weightClasses[$i+1] > $vehicleWeight) {
            return $weightClasses[$i];
        }
    }
    return $weightClasses[$i];
}

代码遍历排序的键并检查下一个键是否已经超过车辆重量。如果是,它 returns 当前密钥的数据。

这可能是您正在寻找的答案:

<?php
public static function resolveWeightClass(array $data, $vehicleWeight) {
    $weightClasses = array_keys($data);
    for ($weightClassIndex = 0; $weightClassIndex < count($weightClasses); $weightClassIndex++) {
        $weightClass = $weightClasses[$weightClassIndex];
        $nextWeightClass = (isset($weightClasses[$weightClassIndex+1]) ? $weightClasses[$weightClassIndex+1] : 99999999999);

        if (($weightClass <= $vehicleWeight) && ($nextWeightClass > $vehicleWeight)) {
            return $weightClass;
        }
    }
    return 0;
}
?>