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

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";
}
?>

关键说明:

  1. 生成器函数extractBySeparator:接收原输出的行数组、分隔符和最大输出行数,逐行处理并yield清理后的内容,达到行数限制时直接终止。
  2. 原输出改造:把原本直接echo的内容先存入数组$outputLines,避免输出缓冲的使用,更直观地给生成器提供输入。
  3. 分隔符处理:用rtrim($line, $separator)移除行尾的分隔符,确保输出的内容是干净的随机字符串。
  4. 停止逻辑:每输出一行计数一次,达到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:01:37