PHP中如何根据输入数值匹配数组中的对应范围值?
解决方案
首先我们得先明确输入值和返回值对应的范围逻辑,从你的测试用例能推导出清晰的区间划分:
- 输入 ≤ 500 → 返回100
- 500 < 输入 ≤ 1000 → 返回500
- 1000 < 输入 ≤ 2000 → 返回1000
- 输入 > 2000 → 返回2000
原数组里的数值其实是每个区间的返回标识,区间的上限对应数组里下一个元素的值(最后一个区间的上限用PHP支持的最大整数兜底)。下面提供两种实现思路:
动态适配数组的实现方法
这种方法不需要硬编码具体数值,能自动适配数组内容的变化,灵活性更强:
<?php $array = ['1'=>'100','2'=>'500','3'=>'1000','4'=>'2000']; function checkRange($int){ global $array; // 把数组中的字符串值转换为整数,保留原顺序 $values = array_map('intval', $array); $totalItems = count($values); // 遍历每个元素,匹配对应的区间 for ($i = 0; $i < $totalItems; $i++) { // 确定当前区间的最大值:非最后一个元素取下一个值,最后一个元素用PHP最大整数 $currentMax = ($i < $totalItems - 1) ? $values[$i + 1] : PHP_INT_MAX; // 输入值落在当前区间就返回对应标识 if ($int <= $currentMax) { return $values[$i]; } } // 兜底处理极端情况(比如输入负数),返回第一个区间的标识 return $values[0]; } // 测试验证 echo checkRange(361); // 输出100 echo checkRange(1723); // 输出1000 echo checkRange(842); // 输出500 echo checkRange(8046); // 输出2000 ?>
硬编码判断的实现方法(简单直接)
如果数组内容固定不会变更,也可以用更简洁的条件判断实现,执行效率略高:
<?php $array = ['1'=>'100','2'=>'500','3'=>'1000','4'=>'2000']; function checkRange($int){ if ($int > 2000) { return 2000; } elseif ($int > 1000) { return 1000; } elseif ($int > 500) { return 500; } else { return 100; } } // 测试验证 echo checkRange(361); // 输出100 echo checkRange(1723); // 输出1000 echo checkRange(842); // 输出500 echo checkRange(8046); // 输出2000 ?>
补充说明
- 动态方法适合数组可能发生变化的场景,只需要修改数组内容,函数逻辑不需要调整。
- 硬编码方法更适合数组固定的场景,代码直观易读,但数组变更时需要同步修改条件判断。
内容的提问来源于stack exchange,提问作者Amir m
相关产品推荐
相关产品推荐

