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

PHP解析第三方网页文本按规则求和 拆分行到数组异常如何解决

代码问题修正方案

现有代码的错误点

  • 换行分隔符拼写错误:原代码使用/n拆分行,PHP中转义换行符应为\n,同时需兼容不同系统的\r\n换行格式,否则无法正确拆分多行文本。
  • 列拆分规则错误:原代码用固定4个空格拆分列,文本列之间是不定长的空白(含多个空格、制表符),无法用固定长度空格拆分。
  • 数组赋值逻辑错误:$info[] = explode(...)是向数组追加元素,而非将拆分结果赋值给$info,导致无法按索引读取列值。
  • 索引取值错误:拆分后3位代码对应索引为3、最后一列数值对应索引为4,原代码误用了索引4、5,取值为空。
  • 缺少业务逻辑:未区分Type A/Type B行,也没有统计Type B总和的$bs变量。

修正后代码

if(!empty($_POST['indata'])){
  $in_data = $_POST['indata'];
  // 如果Summernote提交的内容带HTML换行标签,先加这行转换:$in_data = str_replace(["<br>", "<br/>", "<br />"], "\n", $in_data);
  $fa = ["OCS", "CSE"];
  $ns = 0;
  $s = 0;
  $bs = 0;
  // 兼容不同系统换行符拆分行
  foreach(explode(PHP_EOL, $in_data) as $line){
    $line = trim($line);
    if(empty($line)) continue; // 跳过空行
    // 用正则按任意长度空白拆分列
    $info = preg_split('/\s+/', $line);
    // 判断行类型
    if($info[0] == 'Type' && $info[1] == 'A'){
      if(in_array($info[3], $fa)) {
        $ns += intval($info[4]);
      } else {
        $s += intval($info[4]);
      }
    }elseif($info[0] == 'Type' && $info[1] == 'B'){
      $bs += intval($info[4]);
    }
  }
  echo "S:" . $s . " NS:" . $ns . " BS:" . $bs;
}

运行上述代码即可得到预期输出:S:10 NS:11 BS:26

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:54:02