-
kaitenz CI
  
-
Posts: 61
Threads: 16
Joined: Jul 2018
Reputation:
2
12-12-2018, 02:17 AM
(This post was last modified: 12-12-2018, 02:21 AM by kaitenz.
Edit Reason: Added "expected results"
)
Hi everyone.
I want to distribute/assign some data randomly but even amount from an array of users to an array of data.
Here's an example:
I have an array of user ids:
PHP Code: $users = array(20, 47, 25, 210, 194);
Then the array of data:
PHP Code: $data = array( array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???'), array('department' => '???', 'datecreated' => '???') );
// Just assume that we have real data :)
And the result should be like this (to be used by Query Builder's insert_batch()):
PHP Code: $data = array( array('department' => '???', 'datecreated' => '???', 'assignee' => '20'), array('department' => '???', 'datecreated' => '???', 'assignee' => '210'), array('department' => '???', 'datecreated' => '???', 'assignee' => '25'), array('department' => '???', 'datecreated' => '???', 'assignee' => '194'), array('department' => '???', 'datecreated' => '???', 'assignee' => '47'), array('department' => '???', 'datecreated' => '???', 'assignee' => '20'), array('department' => '???', 'datecreated' => '???', 'assignee' => '25'), array('department' => '???', 'datecreated' => '???', 'assignee' => '194'), array('department' => '???', 'datecreated' => '???', 'assignee' => '20'), array('department' => '???', 'datecreated' => '???', 'assignee' => '194'), array('department' => '???', 'datecreated' => '???', 'assignee' => '210'), array('department' => '???', 'datecreated' => '???', 'assignee' => '47'), array('department' => '???', 'datecreated' => '???', 'assignee' => '210'), array('department' => '???', 'datecreated' => '???', 'assignee' => '25'), array('department' => '???', 'datecreated' => '???', 'assignee' => '20'), array('department' => '???', 'datecreated' => '???', 'assignee' => '210'), array('department' => '???', 'datecreated' => '???', 'assignee' => '47') );
Now, I want to assign (from the example) 17 rows to 5 users. So 3 for each user (and the remaining 2 will be either distributed to a random user or to the last person). We want this to be random. I tried to code it myself but failed.
How can I achieve this? Any help?
Thank you very much
-
kaitenz CI
  
-
Posts: 61
Threads: 16
Joined: Jul 2018
Reputation:
2
12-12-2018, 08:44 PM
(This post was last modified: 12-16-2018, 04:49 PM by kaitenz.)
(12-12-2018, 04:07 AM)Pertti Wrote: You could use Tetris next block method:
PHP Code: // list of available user options $users = [20, 47, 25, 210, 194];
// define temp variable $availableUsers = [];
foreach ($data as $i => $row) { // if there are no unique options available, reset available options temp array if (!$availableUsers ) { $availableUsers = $users; }
// pick and assign random user $randomUser = array_rand($availableUsers); $data[$i]['assignee'] = $availableUsers[$randomUser];
// remove option from available list unset($availableUsers[$randomUser]); }
Wow. You saved my life. Thank you so much. I checked the results and your answer fulfilled my expectation.
Again, thank you. +1 rep for you.
(and sorry for the bad grammar..)
|