如何比较键的值并获取 PHP 数组中的值

How to compare key's value and get value in PHP array

我有一个这样的数组

Array
(
    [10] => 0
    [30] => 2
    [90] => 5
    [365] => 10

)

数组键有#days,值有#percentage。

现在,如果通过天数介于 0 到 10 天之间,则百分比将为 0,如果介于 11 到 30 天之间,则百分比将为 2 如果介于 31 到 90 天之间,则百分比将为 5 如果 500 天那么 10

我的密码是

    $closest = null;
    foreach ($stake as $k=>$v) {
        echo "abs($search - $closest)";
        echo "abs($k - $search)";
        if ($closest === null || abs($search - $closest) > abs($k - $search)) {
          $closest = $k;
       }
    }

但是当我超过 11 时它是 return 10 而不是 30

只需遍历您的赌注,并检查搜索值是否为 lesser-equal 当前密钥。如果是这样,将该值设置为最接近,然后退出循环。

如果您在循环后仍然没有找到,则意味着搜索值一定大于您的最大键 - 因此在这种情况下,选择最后一个元素。

$stakes = [10 => 0, 30 => 2, 90 => 5, 365 => 10];
ksort($stakes);
$closest = null;
$search = 11;
foreach($stakes as $threshold => $stake) {
    if($search <= $threshold) {
        $closest = $stake;
        break;
    }
}
if($closest === null) {
    $closest = end($stakes);
}
var_dump($closest);