You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现数组中匹配或最接近值的多结果查询方法

PHP 获取数组中匹配或最接近目标值的所有结果

要实现获取数组中与目标值匹配或最接近的所有元素,你需要修改原函数的逻辑——原函数仅记录单个最小差值的元素,而我们需要跟踪最小差值,并收集所有等于该差值的元素。

实现代码

function getClosestValues($search, $arr) {
    // 处理空数组的边界情况
    if (empty($arr)) {
        return [];
    }

    $closestValues = [];
    $minDiff = null;

    foreach ($arr as $item) {
        $diff = abs($search - $item);

        // 初始化第一个元素的差值和结果
        if ($minDiff === null) {
            $minDiff = $diff;
            $closestValues[] = $item;
            continue;
        }

        // 找到更小的差值,重置结果
        if ($diff < $minDiff) {
            $minDiff = $diff;
            $closestValues = [$item];
        }
        // 差值与当前最小差值相等,加入结果
        elseif ($diff === $minDiff) {
            $closestValues[] = $item;
        }
    }

    return $closestValues;
}

测试示例

$arr = [0, 2, 4, 6, 8, 10, 13, 100];

// 目标值3,返回 [2, 4]
print_r(getClosestValues(3, $arr));

// 目标值9,返回 [8, 10]
print_r(getClosestValues(9, $arr));

// 目标值10(精确匹配),返回 [10]
print_r(getClosestValues(10, $arr));

// 空数组输入,返回 []
print_r(getClosestValues(5, []));

逻辑说明

  1. 边界处理:先判断数组是否为空,避免遍历空数组导致的错误。
  2. 差值计算:遍历数组时,计算每个元素与目标值的绝对差值。
  3. 结果更新:
    • 第一个元素直接作为初始最小差值和结果。
    • 遇到更小的差值时,更新最小差值并重置结果数组为当前元素。
    • 遇到与最小差值相等的元素时,将其加入结果数组。
  4. 返回结果:最终返回所有符合条件的元素数组。

内容的提问来源于stack exchange,提问作者ShibeSon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:21:01