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

PHP如何提取字符串末尾数字并实现学生ID自动递增生成

PHP学生ID自动生成:补全末尾数字提取逻辑

需求说明

  • 当students表无数据时,生成初始ID:for[年份后两位]dl1(例如for22dl1)
  • 表已有数据时,取最新学生ID中dl后的数字,加1生成新ID(例如原IDfor22dl120 → 新IDfor22dl121)

解决方案:提取dl后的数字

用正则表达式可以精准匹配dl之后的所有数字,相比字符串分割更稳定,能适配任意长度的数字后缀。

修正后的完整代码

// 生成学生ID
$year = date('y');
$sql = "select sno from students ORDER BY sno DESC LIMIT 1";
$result = mysqli_query($con, $sql);

if(mysqli_num_rows($result) > 0){
    $row = mysqli_fetch_array($result);
    $latestId = $row['sno']; // 注意:这里要和SQL查询的字段名一致,原代码存在字段不匹配问题
    
    // 提取dl后面的数字
    preg_match('/dl(\d+)$/', $latestId, $matches);
    $sid = isset($matches[1]) ? (int)$matches[1] + 1 : 1;
    
    // 直接拼接生成新ID
    $student_id = "for{$year}dl{$sid}";
} else {
    // 表为空时生成初始ID
    $student_id = "for{$year}dl1";
}

关键细节说明

  1. 正则匹配逻辑:/dl(\d+)$/ 会匹配字符串末尾dl之后的所有数字,$matches[1]就是提取到的数字串,转成整数后加1即可。
  2. 字段名修正:原代码SQL查的是sno,但后续用$id['student_id'],这会导致获取不到数据,必须保证字段名统一(如果你的表字段是student_id,把SQL改成select student_id from students ORDER BY student_id DESC LIMIT 1即可)。
  3. 简化字符串拼接:不需要先加空格再替换,直接拼接更高效简洁。

测试验证

  • 输入ID:for22dl1 → 提取数字1 → 新ID:for22dl2
  • 输入ID:for22dl120 → 提取数字120 → 新ID:for22dl121

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:50:41