最直接方式是用 array_merge() 合并数组后通过 (object) 强制转换为 stdClass 对象;该方法仅浅转换顶层键,数字键需预处理,深层嵌套需递归函数或 json_encode/json_decode。

PHP合并数组后转成 stdClass 对象,最直接的方式是先用 array_merge()(或其他合并方式)得到最终数组,再用 (object) 强制类型转换即可。
用 (object) 强制转换最简单
这是最常用、最轻量的方法,适用于一维或嵌套关联数组:
- 合并多个数组(注意:
array_merge()要求参数都是数组) - 对合并结果执行
(object)$array - 结果就是标准的
stdClass实例,属性名对应键名,值对应键值
示例:
$a = ['name' => 'Tom', 'age' => 25]; $b = ['city' => 'Beijing', 'job' => 'Dev']; $merged = array_merge($a, $b); $obj = (object)$merged; // $obj->name === 'Tom', $obj->city === 'Beijing'
处理数字索引数组要小心
如果合并后的数组含纯数字键(如 [0 => 'a', 1 => 'b']),强制转 stdClass 后会变成属性名 0、1 —— 这在 PHP 中合法但访问麻烦(需用 $obj->{'0'})。建议提前转为关联格式:
立即学习“PHP免费学习笔记(深入)”;
- 用
array_values()重置索引再合并(若只需值) - 或用
array_combine()+ 自定义键名(若需控制属性名) - 更稳妥的做法:遍历数字键数组,手动赋值到新关联数组中
深层嵌套数组也能转,但只转一层
(object) 是浅转换:顶层键变属性,值如果是子数组,仍保持数组类型,不会递归转成对象。
如需完全对象化(所有子数组也变 stdClass),可用递归函数:
function array_to_object($arr) {
if (!is_array($arr)) return $arr;
$obj = new stdClass();
foreach ($arr as $k => $v) {
$obj->$k = array_to_object($v);
}
return $obj;
}
$nested = ['user' => ['name' => 'Alice', 'tags' => ['php', 'web']]];
$obj = array_to_object($merged); // 所有层级都变成对象
用 json_encode + json_decode 也能实现
一行写法(适合简单场景):
$obj = json_decode(json_encode($merged));
原理:先序列化为 JSON 字符串,再反解为对象。优点是自动处理嵌套,缺点是性能略低、不支持资源/闭包/不可序列化数据,且会丢掉数字键的原始顺序(JSON 对象无序)。



















