第二个参数设为true,使json_decode()将JSON中的所有对象统一转为PHP关联数组而非stdClass对象,便于用$arr['key']方式访问,避免混合使用->和[]带来的复杂性和错误。

第二个参数设为 true,表示让 json_decode() 把 JSON 中的所有对象(即花括号 {} 包裹的部分)都转换成 PHP 关联数组,而不是默认的 stdClass 对象。
为什么这个参数关键
JSON 字符串里既有对象({}),也有数组([])。PHP 默认把 {} 当成对象处理,你得用 -> 访问,比如 $obj->name;而设为 true 后,全部统一成数组,直接用方括号访问,比如 $arr['name'],更符合多数业务逻辑习惯,也避免混合类型带来的判断负担。
不加 true 会怎样
默认行为是 false,返回对象:
-
json_decode('{"name":"张三"}')→ 返回stdClass对象,var_dump()显示object(stdClass)#1 (1) { ["name"]=> string(6) "张三" } - 这时你不能写
$data['name'],会报错;必须写$data->name - 如果 JSON 里还有嵌套对象,每一层都要用
->,写起来啰嗦且容易出错
加了 true 的实际效果
所有层级的对象都变成关联数组,包括嵌套结构:
立即学习“PHP免费学习笔记(深入)”;
json_decode('{"user":{"id":100,"tags":["a","b"]}}', true)- 结果是完整数组:
['user' => ['id' => 100, 'tags' => ['a','b']]] - 可直接取值:
$arr['user']['tags'][0],无需任何类型转换或递归处理
注意事项
这个 true 是布尔值,不是字符串 "true" 或数字 1。虽然 PHP 会松散转换,但显式写 true 更安全、语义清晰、团队协作时不易误解。



















