PHP 页面顶部冒出一行 Warning: Array to string conversion,定位到某一行 echo。代码没报致命错误,页面却把数组打成了 Array,后面的逻辑全乱。这类警告不致命,但会污染页面输出,接口返回 JSON 时直接变成非法格式。
这个提示在说什么
PHP 里数组不能直接当字符串用,echo、字符串拼接、strlen 碰到数组就会抛 array to string conversion。PHP 7 是 Notice,PHP 8 升成 Warning。常见场景:表单里 name 用了方括号提交多选,后端直接拿 $_POST 去拼 SQL;或者从数据库查出一行结果,忘了取字段就 echo。它不是语法错误,代码还能往下跑,所以最容易被忽略。
先打印再决定怎么转
用 var_dump($data) 或 print_r($data, true) 看结构,确认是一维还是二维。要展示给用户,用 implode 拼一维数组;要传给前端,用 json_encode 并加 JSON_UNESCAPED_UNICODE。调试完记得把输出删掉,别留在线上。json_encode 遇到中文默认转成转义序列,加 JSON_UNESCAPED_UNICODE 可读性更好,前端解析不受影响。
$tags = ['php', 'mysql', 'linux']; echo implode(', ', $tags); echo json_encode($tags, JSON_UNESCAPED_UNICODE);从源头改掉
接收参数时先判断类型,is_array($_POST['tag']) 为真再遍历,别直接塞进字符串。拼 SQL 用预处理绑定,数组参数逐个绑定。模板里输出前统一转义,数组字段明确取下标,比如 $row['name']。开了错误日志的站点,搜 array to string conversion 就能找到文件和行号,比盯着页面猜快得多。
看到这个提示不用慌,它只是类型用错了。把数组当数组处理,该循环循环,该编码编码,问题就没了。用框架的话,模板引擎一般会自动转义,别绕过去用原始输出函数硬拼。