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

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(所有价格均小于目标金额)

逻辑说明

  1. 初始化closestId为null,closestPrice为PHP最大整数,确保第一个符合条件的价格会被选中。
  2. 遍历数组时,先检查是否存在精确匹配的价格,若有直接返回对应ID。
  3. 对于大于目标金额的价格,仅保留其中最小的那个对应的ID,保证结果是「最接近且不小于」的。

方法二:有序数组优化法

如果你的$prices数组已经按price升序排列,可以用更高效的遍历方式,找到第一个大于等于目标金额的元素就返回:

function findClosestHigherId($targetAmount, $prices) {
    foreach ($prices as $item) {
        if ($item['price'] >= $targetAmount) {
            return $item['id'];
        }
    }
    return null;
}

注意事项

  • 此方法依赖数组的升序排序,若数组顺序打乱会导致结果错误。
  • 同样会优先返回精确匹配的ID,因为升序排列中精确匹配的元素会是第一个满足>=条件的项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:05:20