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

PHP数组取值与单值判断:下拉框分数计算及区间判断问题

问题场景与需求

我有3个取值范围为0到25的下拉选择框,HTML代码如下:

<select class="form-select" id="select1" name="select1">
<option selected value="0">label...</option>
<option value="5">label...</option>
<option value="10">label...</option>
<option value="15">label...</option>
<option value="20">label...</option>
<option value="25">label...</option>
</select>
<select class="form-select" id="select2" name="select2">
<option selected value="0">label...</option>
<option value="5">label...</option>
<option value="10">label...</option>
<option value="15">label...</option>
<option value="20">label...</option>
<option value="25">label...</option>
</select>
<select class="form-select" id="select3" name="select3">
<option selected value="0">label...</option>
<option value="5">label...</option>
<option value="10">label...</option>
<option value="15">label...</option>
<option value="20">label...</option>
<option value="25">label...</option>
</select>

尝试通过$_GET获取三个下拉框的值并计算总分,PHP代码如下:

//get select values
$select1= $_GET['select1'];
$select2= $_GET['select2'];
$select3= $_GET['select3'];

$totalValues = array($select1, $select2, $select2);
$totalScore = array_sum($totalValues);

需要实现以下条件判断逻辑:

  • 判断数组中是否存在值处于5-9区间
  • 判断数组中是否存在值处于10-14区间
  • 判断数组中是否存在值处于15-19区间
  • 判断数组中是否存在值处于20-25区间

尝试用in_array()实现但遇到问题,请问最优实现方案是什么?


最优实现方案

1. 先修正代码错误

首先你定义$totalValues时存在笔误,将$select3写成了$select2,需修正。同时$_GET获取的值为字符串类型,建议转为整数避免判断异常:

// 转整数并修正数组元素
$select1 = (int)$_GET['select1'];
$select2 = (int)$_GET['select2'];
$select3 = (int)$_GET['select3'];

$totalValues = array($select1, $select2, $select3);
$totalScore = array_sum($totalValues);

2. 区间判断的两种高效实现

in_array()仅能判断精确值,无法直接处理区间判断,推荐以下两种方案:

方案一:使用array_filter()过滤判断

通过array_filter()筛选符合区间的元素,再判断结果是否非空:

// 判断是否存在5-9区间的值
$has5_9 = !empty(array_filter($totalValues, function($val) {
    return $val >= 5 && $val <= 9;
}));

// 判断是否存在10-14区间的值
$has10_14 = !empty(array_filter($totalValues, function($val) {
    return $val >= 10 && $val <= 14;
}));

// 判断是否存在15-19区间的值
$has15_19 = !empty(array_filter($totalValues, function($val) {
    return $val >= 15 && $val <= 19;
}));

// 判断是否存在20-25区间的值
$has20_25 = !empty(array_filter($totalValues, function($val) {
    return $val >= 20 && $val <= 25;
}));

方案二:单次遍历完成所有判断

如果追求更高效率,可遍历数组一次同时完成所有区间判断,还能提前终止遍历:

$has5_9 = false;
$has10_14 = false;
$has15_19 = false;
$has20_25 = false;

foreach ($totalValues as $val) {
    if ($val >= 5 && $val <= 9) {
        $has5_9 = true;
    } elseif ($val >= 10 && $val <= 14) {
        $has10_14 = true;
    } elseif ($val >= 15 && $val <= 19) {
        $has15_19 = true;
    } elseif ($val >= 20 && $val <= 25) {
        $has20_25 = true;
    }

    // 所有条件满足后提前终止遍历
    if ($has5_9 && $has10_14 && $has15_19 && $has20_25) {
        break;
    }
}

3. 结合总分判断的完整逻辑

如果需要结合$totalScore <= 15的条件设置$rating,可参考以下代码:

$rating = null;
if ($totalScore <= 15) {
    $has5_9 = !empty(array_filter($totalValues, function($val) {
        return $val >= 5 && $val <= 9;
    }));
    if ($has5_9) {
        $rating = 5;
    }
    // 可在此扩展其他区间对应的rating赋值逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:12:45