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, []));
逻辑说明
- 边界处理:先判断数组是否为空,避免遍历空数组导致的错误。
- 差值计算:遍历数组时,计算每个元素与目标值的绝对差值。
- 结果更新:
- 第一个元素直接作为初始最小差值和结果。
- 遇到更小的差值时,更新最小差值并重置结果数组为当前元素。
- 遇到与最小差值相等的元素时,将其加入结果数组。
- 返回结果:最终返回所有符合条件的元素数组。
内容的提问来源于stack exchange,提问作者ShibeSon
相关产品推荐
相关产品推荐

