我使用此函數以用戶角色和組返回用戶。對象數組返回相同的值
我想返回具有正確索引的對象數組,這就是爲什麼我創建$ 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