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
相关产品推荐
相关产品推荐

