PHP逐行获取textarea内容并分组到三个容器的代码修复
问题描述
需要实现逐行获取textarea提交的内容,将所有行分组到3个容器中,原有代码存在循环逻辑错误,运行时每行内容会重复输出3次,无法达成分组效果。
原有代码缺陷
- 换行拆分逻辑未兼容Windows系统的
\r\n换行格式,直接使用\n拆分可能残留多余回车字符 - 错误嵌套
foreach行遍历和for循环,每读取1行就执行3次输出,导致单行重复打印3次 - 未实现分组分配逻辑,仅做了简单的文本输出,无法完成内容分到3个容器的需求
修复实现
修复逻辑分为三步:首先预处理提交的文本内容,统一换行符后拆分、过滤空行;其次初始化3个分组数组,按行轮询分配到对应分组;最后遍历分组数组渲染对应容器即可。
完整修复代码如下:
<form method="POST" action="test.php"> <textarea name="textarea" style="width:100%; height: 20vh"></textarea><br /><br /> <input type="submit" class="button" style="float: right; cursor:pointer;" value="提交"> </form> <?php // 仅在表单提交时执行处理逻辑 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['textarea'])) { // 统一换行符,兼容多系统换行格式 $rawContent = str_replace("\r\n", "\n", $_POST['textarea']); $rawLines = explode("\n", $rawContent); $lines = []; // 过滤空行,去除每行首尾空白 foreach ($rawLines as $line) { $trimLine = trim($line); if ($trimLine !== '') { $lines[] = $trimLine; } } // 初始化3个分组容器 $groups = [[], [], []]; // 逐行分配到分组:第1、4、7...行分到第1组,第2、5、8...行分到第2组,第3、6、9...行分到第3组 foreach ($lines as $idx => $line) { $groups[$idx % 3][] = $line; } // 渲染3个容器输出内容 foreach ($groups as $key => $groupLines) { $containerNum = $key + 1; echo "<div style='border:1px solid #eee; padding:12px; margin:10px 0; border-radius:4px;'>"; echo "<h4>容器{$containerNum}</h4>"; foreach ($groupLines as $line) { echo $line . "<br/>"; } echo "</div>"; } } ?>
若需要调整分组规则,比如按内容特征、固定行数划分分组,只需修改行分配阶段的分组索引计算逻辑即可。
内容的提问来源于stack exchange,提问作者Piotr
相关产品推荐
相关产品推荐

