PHP 5.3-7.1中匹配数组中最接近且不小于指定金额的ID
解决方案
针对PHP 5.3至7.1环境,你可以通过以下两种方式实现需求:
方法一:通用遍历法(不依赖数组排序)
这种方法不要求原数组按价格排序,兼容性强,且优先处理精确匹配:
function findClosestHigherId($targetAmount, $prices) { $closestId = null; $closestPrice = PHP_INT_MAX; foreach ($prices as $item) { $currentPrice = $item['price']; // 精确匹配直接返回对应ID if ($currentPrice === $targetAmount) { return $item['id']; } // 筛选大于目标金额的价格,记录最小的那个对应的ID if ($currentPrice > $targetAmount && $currentPrice < $closestPrice) { $closestPrice = $currentPrice; $closestId = $item['id']; } } return $closestId; } // 调用示例 $prices = array( array('id' => '28','price' =>100 ), array('id' => '29','price' =>105 ), array('id' => '30','price' =>110 ), array('id' => '31','price' =>115 ), array('id' => '32','price' =>120 ), array('id' => '33','price' =>125 ), array('id' => '34','price' =>130 ) ); // 测试用例 echo findClosestHigherId(113, $prices); // 输出:31 echo findClosestHigherId(110, $prices); // 输出:30 echo findClosestHigherId(115, $prices); // 输出:31 echo findClosestHigherId(135, $prices); // 输出:null(所有价格均小于目标金额)
逻辑说明
- 初始化
closestId为null,closestPrice为PHP最大整数,确保第一个符合条件的价格会被选中。 - 遍历数组时,先检查是否存在精确匹配的价格,若有直接返回对应ID。
- 对于大于目标金额的价格,仅保留其中最小的那个对应的ID,保证结果是「最接近且不小于」的。
方法二:有序数组优化法
如果你的$prices数组已经按price升序排列,可以用更高效的遍历方式,找到第一个大于等于目标金额的元素就返回:
function findClosestHigherId($targetAmount, $prices) { foreach ($prices as $item) { if ($item['price'] >= $targetAmount) { return $item['id']; } } return null; }
注意事项
- 此方法依赖数组的升序排序,若数组顺序打乱会导致结果错误。
- 同样会优先返回精确匹配的ID,因为升序排列中精确匹配的元素会是第一个满足
>=条件的项。
内容的提问来源于stack exchange,提问作者jeyglo
相关产品推荐
相关产品推荐

