PHP如何添加生成器函数,按分隔符拆分字符串并限制输出25行
基于Generator实现按分隔符提取并限制输出行数
下面是修改后的代码,新增了生成器函数来处理原输出内容,按分隔符;提取数据,并在输出25行后停止:
<?php function getRandomWord($len = 5) { $word = array_merge(range('a', 'z'), range('A', 'Z')); shuffle($word); return substr(implode($word), 0, $len); } // 生成器函数:按分隔符提取内容,限制输出行数 function extractBySeparator($inputLines, $separator = ';', $maxLines = 25) { $outputCount = 0; foreach ($inputLines as $line) { // 移除行尾的分隔符(如果存在) $cleanLine = rtrim($line, $separator); yield $cleanLine; $outputCount++; // 达到行数限制则终止生成器 if ($outputCount >= $maxLines) { return; } } } // 生成原输出的行数组(替代直接echo,方便生成器处理) $sign = ';'; $outputLines = []; for ($i = 0; $i < 100; $i++) { $line = getRandomWord(); if (($i + 1) % 5 == 0) { $line .= $sign; } $outputLines[] = $line; } // 使用生成器提取并输出内容 foreach (extractBySeparator($outputLines, ';', 25) as $line) { echo $line . "\n"; } ?>
关键说明:
- 生成器函数
extractBySeparator:接收原输出的行数组、分隔符和最大输出行数,逐行处理并yield清理后的内容,达到行数限制时直接终止。 - 原输出改造:把原本直接
echo的内容先存入数组$outputLines,避免输出缓冲的使用,更直观地给生成器提供输入。 - 分隔符处理:用
rtrim($line, $separator)移除行尾的分隔符,确保输出的内容是干净的随机字符串。 - 停止逻辑:每输出一行计数一次,达到25行时通过
return终止生成器,停止迭代。
如果需要按分隔符分割成块(每5行作为一个块输出,输出25个块),可以修改生成器函数如下:
function extractBlocksBySeparator($inputLines, $separator = ';', $maxBlocks = 25) { $block = []; $blockCount = 0; foreach ($inputLines as $line) { $cleanLine = rtrim($line, $separator); $block[] = $cleanLine; // 遇到分隔符时输出当前块 if (str_contains($line, $separator)) { yield $block; $block = []; $blockCount++; if ($blockCount >= $maxBlocks) { return; } } } } // 使用方式 foreach (extractBlocksBySeparator($outputLines, ';', 25) as $block) { echo implode("\n", $block) . "\n---\n"; }
这个版本会把每5行(带分隔符的行作为结束)作为一个块输出,输出25个块后停止。
内容的提问来源于stack exchange,提问作者Bay
相关产品推荐
相关产品推荐

