So, hier ist mein Vorschlag für die Zuteilung.
<?php
// data from db
$participants = [
[
'id' => 1,
'name' => 'Fritz',
'email' => 'fritz@example.com',
'assigned_person' => null
],
[
'id' => 2,
'name' => 'Hans',
'email' => 'hans@example.com',
'assigned_person' => null
],
[
'id' => 3,
'name' => 'Max',
'email' => 'max@example.com',
'assigned_person' => null
],
[
'id' => 4,
'name' => 'Otto',
'email' => 'otto@example.com',
'assigned_person' => null
]
];
$participants_new = $participants;
foreach ($participants as $key => $participant) {
// exclude current participant to prevent assigning him to himself
$participants_tmp = $participants;
unset($participants_tmp[$key]);
// assign person to current participant
shuffle($participants_tmp);
$assign_person = $participants_tmp[0]['id'];
$participants_new[$key]['assigned_person'] = $assign_person;
// remove assigned person from participants
foreach ($participants as $key => $participant) {
if ($participant['id'] == $assign_person) {
unset($participants[$key]);
}
}
}
$participants = $participants_new;
unset($participants_new, $participants_tmp, $assign_person);
echo '<pre>', print_r($participants), '</pre>';
Alles anzeigen
So richtig zufrieden bin ich mit dem Ergebnis nicht, da ich auf eine doppelte Schleife zurückgreifen musste. Mir ist leider keine bessere Lösung eingefallen.
Vielleicht hat jemand anderes ja noch eine bessere Idee, wie man das ein wenig effizienter umsetzen könnte.