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
相关产品推荐
相关产品推荐

