
`explode()` 本身返回一维数组,但因误加方括号 `[]` 导致赋值为二维结构——这是常见语法误用,并非函数异常行为。
在 PHP 中,explode() 是一个纯函数,其作用是将字符串按指定分隔符拆分为一维索引数组。例如 explode('-', '48-72') 的返回值本应是:
array(2) {
[0] => string(2) "48"
[1] => string(2) "72"
}但问题代码中使用了 $myarray[] = explode("-", $mystring); ——这里的 [] 表示向 $myarray 追加一个新元素,而该元素恰好是 explode() 返回的整个数组。因此,$myarray 变成了一个只含一个元素(即那个一维数组)的外层数组,最终形成二维结构:
array(1) {
[0] => array(2) { // ← 外层数组,仅一个元素
[0] => string(2) "48"
[1] => string(2) "72"
}
}✅ 正确写法是直接赋值,不带 []:
$mystring = "48-72";
$myarray = explode("-", $mystring); // 直接接收返回的一维数组
var_dump($myarray);
// 输出:array(2) { [0] => string(2) "48" [1] => string(2) "72" }
// 后续可直接访问:
$value1 = $myarray[0]; // "48"
$value2 = $myarray[1]; // "72"⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- [] 仅在需追加元素到已有数组时使用(如循环中多次 explode 并合并结果);
- 若仅需一次拆分结果,请始终用 $arr = explode(...) 形式;
- 在 PHP 7+ 中,此类误用仍能运行但逻辑错误,建议配合静态分析工具(如 PHPStan)提前发现。
总结:这不是 explode() 的“怪异行为”,而是 PHP 数组赋值语法的精确体现——理解 = 与 []= 的语义差异,是避免此类嵌套陷阱的关键。











