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

PHP while循环读取文件调用Laravel Str::plural仅最后一个单词生效问题

问题根源

SplFileObject::fgets() 读取单行内容时默认会保留行尾的换行符,你前两次读取到的内容实际是 child\r\n、toy\r\n,Laravel的Str::plural()无法识别携带换行后缀的单词,直接原样返回。只有文件最后一行不存在尾随行换行符,读取到的字符串是干净的,所以复数转换正常。

修复方案

方案1:读取后手动修剪空白字符

使用trim()清理读取到的字符串首尾的换行、空格、制表符等空白内容,再做复数转换:

$myFile = new \SplFileObject("words.txt");

while (!$myFile->eof()) {
    $word = trim($myFile->fgets());
    // 跳过文件里的空行
    if (empty($word)) {
        continue;
    }
    $string = Str::plural($word) . "\r\n";
    echo nl2br($string);
}

方案2:初始化SplFileObject时自动丢弃换行符

通过设置SplFileObject::DROP_NEW_LINE flag,让读取操作自动丢弃行尾换行符:

// 构造函数第四个参数设置丢弃换行的flag
$myFile = new \SplFileObject("words.txt", 'r', false, \SplFileObject::DROP_NEW_LINE);

while (!$myFile->eof()) {
    $word = $myFile->fgets();
    if (empty($word)) {
        continue;
    }
    $string = Str::plural($word) . "\r\n";
    echo nl2br($string);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:27:03