PHP多维数组与嵌套项合并

问题描述 投票:1回答:1

我试图从下面的代码生成一个单一的数组。目前,它正在生成一个多数阵列,大部分都是相同的数据。唯一具有多个选项的部分是数组中的“groups'item”。基本上我想要1个数组,其中倍数在嵌套数组中。

$result = $c['db']->select(
    "SELECT users.*, user_details.*, user_roles.role, user_groups.*, groups.* 
    FROM users, user_details, user_roles, user_groups, groups 
    WHERE users.user_id = 2
    AND user_details.user_id = users.user_id
    AND user_roles.role_id = users.user_role
    AND user_groups.user_id = users.user_id
    AND user_groups.group_id = groups.group_id
     "
);

if (! $result) {
    return null;
}

return (object) array(
    'id' => (int) $result['user_id'],
    'email' => $result['email'],
    'username' => $result['username'],
    'first_name' => $result['first_name'],
    'last_name' => $result['last_name'],
    'confirmed' => $result['confirmed'] == 'Y',
    'role' => $result['role'],        
    'role_id' => (int) $result['user_role'],
    'groups' => array (
            'group_name' => $result['group'],                 
        ),
    'phone' => $result['phone'],
    'address' => $result['address'],
    'is_banned' => $result['banned'] == 'Y',
    'is_admin' => strtolower($result['role']) === 'admin',
    'last_login' => $result['last_login']
);
};

这当前产生以下数组:

(
[0] =>; Array
    (
        [user_id] =>; 2
        [email] =>; [email protected]
        [username] =>; sam
        [password] =>; $2a$13$axDJv7uljBmryyYoH4w0I.9sDuqjegPOh0WE4gX5UmMh4MbqfMLc.
        [confirmation_key] =>; 
        [confirmed] =>; Y
        [password_reset_key] =>; 
        [password_reset_confirmed] =>; N
        [password_reset_timestamp] =>; 
        [register_date] =>; 2017-12-12
        [user_role] =>; 2
        [last_login] =>; 2017-12-18 10:53:00
        [banned] =>; N
        [id_user_details] =>; 2
        [first_name] =>; 
        [last_name] =>; 
        [phone] =>; 
        [address] =>; 
        [role] =>; editor            
        [group] =>; owners
    )

[1] =>; Array
    (
        [user_id] =>; 2
        [email] =>; [email protected]
        [username] =>; sam
        [password] =>; $2a$13$axDJv7uljBmryyYoH4w0I.9sDuqjegPOh0WE4gX5UmMh4MbqfMLc.
        [confirmation_key] =>; 
        [confirmed] =>; Y
        [password_reset_key] =>; 
        [password_reset_confirmed] =>; N
        [password_reset_timestamp] =>; 
        [register_date] =>; 2017-12-12
        [user_role] =>; 2
        [last_login] =>; 2017-12-18 10:53:00
        [banned] =>; N
        [id_user_details] =>; 2
        [first_name] =>; 
        [last_name] =>; 
        [phone] =>; 
        [address] =>; 
        [role] =>; editor
        [group_id] =>; 2
        [group] =>; mentors
    )

)

所需的输出是为了嵌套多个“组”项。我不知何故需要循环

'groups' => array (
            'group_name' => $result['group'],                 
        ),
php arrays
1个回答
1
投票

在返回结果之前,我会建立一个组名数组

if (! $result) {
     return null;
}

$group_names = array();

foreach($result as $result_row) {
     $group_names[] = $result_row['group']
}

return (object) array(
    'id' => (int) $result[0]['user_id'],
    'email' => $result[0]['email'],
    'username' => $result[0]['username'],
    'first_name' => $result[0]['first_name'],
    'last_name' => $result[0]['last_name'],
    'confirmed' => $result[0]['confirmed'] == 'Y',
    'role' => $result[0]['role'],        
    'role_id' => (int) $result[0]['user_role'],
    'groups' => array (
            'group_name' => $group_names,                 
    ),
    'phone' => $result[0]['phone'],
    'address' => $result[0]['address'],
    'is_banned' => $result[0]['banned'] == 'Y',
    'is_admin' => strtolower($result[0]['role']) === 'admin',
    'last_login' => $result[0]['last_login']
);

那段代码不是很优雅,但我不想改变你已经拥有的东西。一些对象关系映射工具将为您执行此类转换,但它们通常还希望您事先定义表之间的关系。将这些技术之一改装到您的代码库中可能需要做很多工作,但您可能需要考虑为下一个项目学习以下哪一项。

© www.soinside.com 2019 - 2024. All rights reserved.