推荐用str_replace统一换行符为"\n"后explode,再array_filter('trim')过滤空行,最后array_values重索引;避免preg_split因\s*导致误删内容且性能差。

直接用 explode() 配合 array_filter() 即可,注意 PHP 8.3 默认保留字符串键(需显式重索引)。
基础写法:explode + array_filter
换行符在不同系统可能为 "\n"、"\r\n" 或 "\r"。若只需处理标准 LF(如 PHP CLI 或 Unix 环境),最简方式是:
- 用
explode("\n", $str)拆分 - 用
array_filter($lines, 'trim')过滤空行和纯空白行(因trim()在空或全空白时返回空字符串,被判定为 falsy) - 用
array_values()重置数组下标,避免键名不连续
兼容多换行符:先统一再分割
为稳妥处理 Windows(\r\n)、Mac(\r)、Unix(\n)混合情况,推荐先标准化:
- 用
str_replace(["\r\n", "\r"], "\n", $str)统一为\n - 再执行
explode("\n", ...)和array_filter(..., 'trim') - 最后
array_values()得到紧凑数字索引数组
一行简洁版(PHP 8.3 可用)
可写成单表达式,清晰且无副作用:
$lines = array_values(array_filter(
explode("\n", str_replace(["\r\n", "\r"], "\n", $str)),
'trim'
));
注意:不要用 preg_split('/\s*\n\s*/') 代替
看似能“自动去空”,但有风险:
-
\s*会匹配行首尾任意空白(包括制表符、全角空格),可能误吞有效内容 - 正则开销略高,且对仅含空格的行过滤不彻底(如
" \n"仍会被拆出空元素) - 不如显式
trim()语义明确、行为可控
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











