我试图从下面的代码生成一个单一的数组。目前,它正在生成一个多数阵列,大部分都是相同的数据。唯一具有多个选项的部分是数组中的“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'],
),
在返回结果之前,我会建立一个组名数组
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']
);
那段代码不是很优雅,但我不想改变你已经拥有的东西。一些对象关系映射工具将为您执行此类转换,但它们通常还希望您事先定义表之间的关系。将这些技术之一改装到您的代码库中可能需要做很多工作,但您可能需要考虑为下一个项目学习以下哪一项。