2023-10-31 02:24:08
explode() 是 PHP 中用于字符串分割的核心函数,能够将多行字符串(尤其是 Heredoc/Nowdoc 格式)高效转换为结构化数组。以下从基础语法到实际应用进行系统解析。
正数:最多返回 limit 个元素,剩余部分合并到最后一个元素。
负数:排除最后 -limit 个元素,其余全部返回。
默认值 PHP_INT_MAX:返回所有分割结果。
输出结果:
Array( [0] => "1;Marvel;31546720180001;Super;Man;m;06.09.2002" [1] => "2;Marvel;31546720190008;Bat;Man;m;26.08.2004" [2] => "3;Marvel;31546720190010;Wonder;Woman;f;06.05.2005" [3] => "4;Marvel;31546720190013;Black;Widow;f;01.09.2004")3. 跨平台兼容性处理若需同时处理 n 和 rn,可使用正则表达式:
$lines = preg_split("/r?n/", $heroDataString);每行数据以分号 ; 分隔字段,需遍历行数组并二次分割:
$heroes = [];$lines = explode("n", $heroDataString);foreach ($lines as $line) { if (!empty(trim($line))) { // 过滤空行 $heroes[] = explode(';', $line); }}print_r($heroes);输出结果:
Array( [0] => Array( [0] => "1" [1] => "Marvel" [2] => "31546720180001" [3] => "Super" [4] => "Man" [5] => "m" [6] => "06.09.2002" ) [1] => Array( [0] => "2" [1] => "Marvel" [2] => "31546720190008" [3] => "Bat" [4] => "Man" [5] => "m" [6] => "26.08.2004" ) // 其他行数据...)2. 数据清洗与类型转换分割后的字段均为字符串类型,需根据实际需求转换:
foreach ($heroes as &$hero) { $hero[0] = (int)$hero[0]; // ID 转为整数 $hero[2] = (int)$hero[2]; // 编号转为整数 $hero[6] = DateTime::createFromFormat('d.m.Y', $hero[6]); // 日期转为对象}使用 trim($line) 过滤空行,避免生成无效数组元素:
if (!empty(trim($line))) { // 处理非空行}3. 替代方案:str_getcsv() 与 fgetcsv()若字段中包含分隔符(如逗号分隔且字段用引号包裹),建议使用:
示例:
$csvString = '"Name","Age","City"n"John",25,"New York"';$rows = str_getcsv($csvString, "n");foreach ($rows as $row) { $fields = str_getcsv($row, ','); print_r($fields);}4. 性能优化explode() 函数通过灵活的分隔符配置,可高效完成多行字符串到结构化数组的转换。结合以下实践可提升代码健壮性:
掌握这些技巧后,explode() 将成为处理字符串数据的强大工具。