应根据场景选择合适方法:一、用explode(php_EOL,$text)跨平台分割;二、用preg_split(‘/(rn|r|n)/’,$text,-1,PREG_SPLIT_NO_EMPTY)统一匹配;三、先str_replace再explode(“n”)并trim;四、文件场景用file()配合标志位。

如果您有一段包含换行符的字符串,需要将其按换行符分割为数组元素,则可能是由于不同操作系统使用了不同的换行符格式。以下是实现该目标的多种方法:
一、使用 explode() 配合 PHP_EOL
PHP_EOL 是 PHP 内置常量,表示当前系统平台的标准换行符,可跨平台兼容 windows(rn)、linux(n)和 macOS(n)。此方法适用于已知换行符与系统一致的场景。
1、定义包含多行文本的字符串变量,例如 $text = “第一行rn第二行n第三行”;
2、调用 explode(PHP_EOL, $text) 将字符串按当前系统换行符分割。
立即学习“PHP免费学习笔记(深入)”;
3、使用 Array_filter() 去除可能产生的空数组项,避免因连续换行导致的空元素。
二、使用 preg_split() 统一匹配所有换行符
正则方式能同时识别 n、rn 和 r 三种换行格式,不依赖运行环境,适合处理来自不同系统的混合文本。
1、构造正则表达式 ‘/(rn|r|n)/’ 作为分隔模式。
2、调用 preg_split(‘/(rn|r|n)/’, $text, -1, PREG_SPLIT_NO_EMPTY) 执行分割并自动过滤空项。
3、确保返回结果为纯文本数组,无需手动 trim() 每个元素,因 PREG_SPLIT_NO_EMPTY 已排除空白片段。
三、先统一换行符再 explode()
将原始字符串中所有类型的换行符替换为单一标准(如 n),再用 explode(“n”, $text) 处理,逻辑清晰且便于调试。
1、使用 str_replace([‘rn’, ‘r’], “n”, $text) 将 windows 和旧 mac 换行符统一转为 unix 风格。
2、执行 explode(“n”, $text) 获取基础数组。
3、对结果数组遍历调用 array_map(‘trim’, $array),清除每行首尾空白字符,防止缩进或空格干扰后续使用。
四、使用 file() 函数直接读取为行数组
当数据来源于文件时,file() 可直接将文件内容按行读取为索引数组,自动处理换行符且默认保留换行符;添加 FILE_IGNORE_NEW_LINES 标志即可去除每行末尾换行符。
1、确保目标文本已保存为临时文件,路径存入变量 $filepath。
2、调用 file($filepath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) 读取内容。
3、FILE_SKIP_EMPTY_LINES 会自动跳过空行,无需额外过滤。