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

PHP使用fwrite写入文件时如何在循环中递增LaTeX问题块序号

实现方案

在循环外维护独立的自增计数器,每次写入前替换LaTeX中对应位置的固定序号即可,步骤如下:

  • 进入while遍历循环前,初始化题号计数器,初始值为1
  • 每次循环中,先把计数器格式化为两位带前导零的字符串(匹配现有{01}的格式规范),替换待写入内容里的固定序号
  • 内容写入完成后计数器自增,进入下一轮循环

代码参考

// 打开目标文件
$fo = fopen($newName, 'w') or die("can't open file");
// 初始化题号计数器
$questionNo = 1;

// 数据库结果集遍历逻辑
while ($row = mysqli_fetch_assoc($result)) {
    // 格式化当前题号为两位,不足位补前导零,自动适配1-9显示01-09、10及以上显示10、11的格式
    $currentNo = sprintf('%02d', $questionNo);
    
    // 替换LaTeX片段中的固定序号,下面两种方案二选一即可
    // 方案1:固定匹配{01}替换,性能更好,适合数据库里存的LaTeX模板固定为{01}的场景
    $writeContent = str_replace('{01}', '{'.$currentNo.'}', $row['entetequestionmonochoix']);
    // 方案2:正则匹配第一个花括号包裹的数字替换,容错性更高,就算后续模板里的初始序号改成{1}/{001}也能正常工作
    // $writeContent = preg_replace('/\{\d+\}/', '{'.$currentNo.'}', $row['entetequestionmonochoix'], 1);
    
    // 写入内容
    fwrite($fo, $writeContent . PHP_EOL);
    
    // 序号自增
    $questionNo++;
}

// 写入完成后关闭文件句柄
fclose($fo);

注意点

  • 如果不需要两位前导零的格式,直接用$questionNo替换即可,省去sprintf格式化步骤
  • 所有内容写入完成后记得调用fclose($fo)释放文件句柄,避免文件写入异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:12:21