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

