You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何通过foreach循环合并数组中子对象属性到父对象?

如何将PHP数组转换为无子对象的平级对象组

你现在的问题是递归函数会把所有嵌套数组都转成子对象,但你需要把user_role里的属性直接提升到用户对象的平级层级,我来帮你调整代码实现需求:

方案1:针对user_role的定制处理

如果你的需求只需要处理user_role这个特定嵌套键,修改后的函数如下:

public function array_to_object($array) {
    $obj = new stdClass;
    foreach($array as $k => $v) {
        // 遇到user_role时,直接将其内部属性合并到当前对象
        if ($k === 'user_role' && is_array($v)) {
            foreach ($v as $subKey => $subValue) {
                $obj->{$subKey} = $subValue;
            }
        } 
        // 其他嵌套数组继续递归转换(保留原有子对象逻辑)
        elseif (is_array($v)) {
            $obj->{$k} = $this->array_to_object($v);
        } else {
            $obj->{$k} = $v;
        }
    }
    return $obj;
}

这个函数会跳过user_role的子对象生成,直接把ur_name这类属性添加到用户对象中,同时不会影响其他可能需要保留的嵌套结构。

方案2:通用的全嵌套平级合并

如果你需要把所有层级的嵌套数组/对象都平级合并到父对象中(不止user_role),可以用这个更通用的版本:

public function array_to_object($array) {
    $obj = new stdClass;
    foreach($array as $k => $v) {
        if (is_array($v)) {
            // 先递归转换嵌套数组为对象,再将其属性全部合并到当前对象
            $nestedObj = $this->array_to_object($v);
            foreach ($nestedObj as $subKey => $subValue) {
                $obj->{$subKey} = $subValue;
            }
        } else {
            $obj->{$k} = $v;
        }
    }
    return $obj;
}

这个版本会把所有嵌套层级的属性都提升到最外层对象,适合需要完全扁平化对象结构的场景。

测试后,两种方案都能得到你想要的结果:

Array (
[0] => stdClass Object (
[_id] => 12
[username] => lucaspedro
[first_name] => Lucas
[ur_name] => Admin
)
[1] => stdClass Object (
[_id] => 32
[username] => joaosilva
[first_name] => Joao
[ur_name] => Member
)
)

内容的提问来源于stack exchange,提问作者Müller Nato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:58:11