![PHP 中“[] 操作符不支持字符串”错误的完整解决方案](https://img.php.cn/upload/article/001/246/273/177562177111715.jpg)
该错误通常因对字符串变量误用数组追加语法(如 $var9[] = ...)导致,核心在于变量此前已被赋值为字符串而非数组,需在使用前确保其初始化为数组类型。
该错误通常因对字符串变量误用数组追加语法(如 `$var9[] = ...`)导致,核心在于变量此前已被赋值为字符串而非数组,需在使用前确保其初始化为数组类型。
在 PHP 中,$var[] = $value 是向数组末尾追加元素的快捷语法,但前提是 $var 必须是一个数组。一旦该变量之前被赋过字符串值(例如 $var9 = "some string"),再执行 $var9[] = ... 就会触发致命错误:
Fatal error: Uncaught Error: [] operator not supported for strings
回到你的代码片段:
for ($i = 0; $i <= 61; $i++) {
if(isset($arr[$racknos[$i]])){
$var9[] = $arr[$racknos[$i]]['mat_code']; // ❌ 危险:$var9 可能未初始化或曾被赋字符串
$var10[] = $arr[$racknos[$i]]['m_lon'];
$var11[] = $arr[$racknos[$i]]['m_lar'];
$var12[] = $arr[$racknos[$i]]['c_lign']." - ".$arr[$racknos[$i]]['cdc_p'];
}
}问题根源极大概率是:$var9(以及 $var10、$var11、$var12)在循环前未声明为数组,或在其他地方被意外赋值为字符串(例如调试时写过 $var9 = "test";),导致 PHP 将其识别为字符串类型,从而拒绝 [] 操作。
✅ 正确做法:在循环开始前显式初始化为空数组
立即学习“PHP免费学习笔记(深入)”;
// ✅ 安全初始化 —— 关键一步!
$var9 = [];
$var10 = [];
$var11 = [];
$var12 = [];
for ($i = 0; $i <= 61; $i++) {
if (isset($arr[$racknos[$i]])) {
$var9[] = $arr[$racknos[$i]]['mat_code'];
$var10[] = $arr[$racknos[$i]]['m_lon'];
$var11[] = $arr[$racknos[$i]]['m_lar'];
$var12[] = $arr[$racknos[$i]]['c_lign'] . " - " . $arr[$racknos[$i]]['cdc_p'];
}
}
// 输出验证
foreach ($var9 as $product) {
echo htmlspecialchars($product) . "<br>";
}⚠️ 注意事项:
- 不要省略初始化:仅靠 [] 语法无法自动创建数组;若变量未定义,PHP 7.1+ 会报错,PHP 7.0 及更早版本可能静默创建,但行为不可靠。
- 避免变量复用冲突:检查整个脚本中是否在 for 循环前已对 $var9 等变量赋值(如 $var9 = ""; 或 $var9 = 0;),这将直接导致错误。
-
增强健壮性:可配合 is_array() 做运行时校验(开发/调试阶段):
if (!is_array($var9)) { trigger_error('$var9 is not an array — check initialization', E_USER_WARNING); $var9 = []; } - 安全输出:使用 htmlspecialchars() 防止 XSS(尤其当数据来自用户或数据库时)。
? 总结:该错误不是语法缺陷,而是类型误用。PHP 是弱类型语言,但 [] 操作符对类型有严格要求。养成「使用前初始化」的习惯,是避免此类 Fatal error 的最有效实践。



















