我使用此函数以用户角色和组返回用户。对象数组返回相同的值
我想返回具有正确索引的对象数组,这就是为什么我创建$ index计数器的原因。
这里的问题是,如果一个用户拥有多于一组的用户,我会得到重复的用户。
因此,例如,如果我有一个用户与3组,我会得到该用户3次。
如何避免重复的用户?
我知道,不知何故,我需要检查,如果该用户已经存在,就像我检查角色,但我不知道在哪里。
此代码将工作,如果我代替用户[“$指数”]与用户[“的$ id”],但是,这种方式我不会以正确的指数阵列,而这正是我需要的。
$stmt = $mysqli->prepare("
SELECT u.id
, u.firstName
, u.lastName
, u.email
, u.phoneNumber
, u.address
, u.birthDate
, ur.roleName
, cg.id
, cg.name
FROM users as u
LEFT
JOIN user_role as ur
ON u.id = ur.userId
LEFT
JOIN user_group as ug
on ug.userId = u.id
LEFT
JOIN control_group as cg
on cg.id = ug.groupId
WHERE u.id != ?");
$stmt->bind_param("i", $_SESSION["id"]);
$stmt->execute();
$stmt->bind_result($id, $firstName, $lastName, $email, $phoneNumber,
$address, $birthDate, $roleName, $groupId, $groupName);
$users = array();
$index = 0;
while ($stmt->fetch()) {
if (empty($users[$index])) {
$users[$index] = array(
'id' => $id,
'firstName' => $firstName,
'lastName' => $lastName,
'email' => $email,
'phoneNumber' => $phoneNumber,
'address' => $address,
'birthDate' => $birthDate,
'roles' => array(),
'groups' => array()
);
}
if ($roleName) {
$found = false;
foreach ($users[$index]['roles'] as $role) {
if($role['roleName'] == $roleName){
$found = true;
break;
}
}
if($found == false)
$users[$index]['roles'][] = array(
'roleName' => $roleName
);
}
if ($groupId) {
$found = false;
foreach ($users[$index]['groups'] as $group) {
if($group['groupName'] == $groupName){
$found = true;
break;
}
}
if($found == false)
$users[$index]['groups'][] = array(
'groupName' => $groupName
);
}
$index++;
}
$stmt->close();
$mysqli->close();
echo json_encode($users);
所以基本上我希望反对这样
{
"id":2,
"firstName":"Jon",
"lastName":"Doe",
"email":"[email protected]",
"phoneNumber":"0621-123-444",
"address":"Address 12a",
"birthDate":"1976-01-01",
"roles":['list of role objects'],
"groups":['list of group objects']
}
而且我不知道,如果我产生对正确的方法的对象,我想,如果有人能告诉我什么是正确的方法和如何正确生成这样的对象。
可以共享输出? – gaurav
我得到像这样的输出https://paste.ofcode.org/4irsgF4s4qcnerArP29NfA,正如你可以看到用户马克有2个组,这就是为什么他显示2倍的原因... –
@ SuperMario'sYYY从你的查询你提取一个用户或许多用户的数据....并且你的意思是它为一个用户返回3行...? – Naincy