Ich benutze diese Funktion, um Benutzer mit ihren Rollen und Gruppen zurückzugeben.Array von Objekten gibt dieselben Werte zurück
Ich möchte Array von Objekten mit korrekten Index zurückgeben, das ist der Grund, warum ich $ Indexzähler erstellt.
Problem hier ist, dass ich doppelte Benutzer bekomme, wenn ein Benutzer mehr als 1 Gruppen hat.
Also zum Beispiel wenn ich einen Benutzer mit 3 Gruppen habe, werde ich diesen Benutzer 3 mal bekommen.
Wie doppelte Benutzer zu vermeiden?
Ich weiß, dass ich irgendwie überprüfen muss, ob dieser Benutzer bereits existiert, wie ich für Rollen überprüft habe, aber ich bin mir nicht sicher, wo.
Dieser Code funktioniert, wenn ich Benutzer ['$ index'] durch Benutzer ['$ id'] ersetze, aber auf diese Weise werde ich Array mit dem richtigen Index nicht bekommen, und das ist was ich brauche.
$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);
Also im Grunde Ich mag diesen
{
"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']
}
Objekt erwarte ich, dass auch mich nicht, wenn ich auf korrekte Art und Weise Objekt bin zu erzeugen, würde Ich mag, wenn jemand kann mir sagen, was richtiger Ansatz ist und wie man ein Objekt wie dieses richtig erzeugt.
Können Sie die Ausgabe teilen? – gaurav
Ich bekomme Ausgabe wie folgt https://paste.ofcode.org/4irsgF4s4qcnerArP29NfA, wie Sie Benutzer Mark haben 2 Gruppen sehen, das ist der Grund, warum er 2 mal angezeigt wird ... –
@ SuperMario'sYoshi von ur Abfrage r Sie holen Daten eines Benutzers oder vieler Benutzer .... und meinst du es gibt 3 Zeilen für einen Benutzer zurück ...? – Naincy