以随机顺序将数组项平均分配给另一个数组 Php
Divide Array Items To Anothe Array Equally In Random Order Php
标题差不多self-explanatory所以我就直接上题了
假设我有一些像这样的项目:
$classicRoles = [
'mafia',
'mafia',
'don',
'civilian',
'civilian',
'civilian',
'civilian',
'civilian',
'civilian',
'sherif'
];
现在执行查询后我得到下一个数组
while ($participantAssoc = mysqli_fetch_assoc($participantsQuery)) {
$pushArray['room_id'] = $participantAssoc['room_id'];
$pushArray['participant_id'] = $participantAssoc['participant_id'];
$pushArray['id'] = $participantAssoc['id'];
$pushArray['role'] = $participantAssoc['role'];
$pushArray['eliminated'] = $participantAssoc['eliminated'];
array_push($participantsArray, $pushArray);
}
这里一切都很好,除非我尝试下一个项目。
我试图给每个参与者一个角色:2 个黑手党角色,1 个唐角色,6 个平民和 1 个警长。
问题是我根本无法让它工作。
因此参与者计数只能因 1 项而异,但我们甚至假设参与者计数和角色计数彼此完全相等。所以现在,谁能告诉我如何使上述逻辑在 PHP 数组中发生? (给每个参与者一个角色:2 个黑手党角色,1 个唐角色,6 个平民和 1 个警长。)
如果参与者数小于或等于角色数,此方法有效。打乱角色数组以使其随机化:
shuffle($classicRoles);
然后在循环中,从角色数组中删除一个并分配给您的新数组:
$pushArray['role'] = array_pop($classicRoles);
你没有规定如果你的参与者多于角色应该发生什么,但是像这样:
if(count($classicRoles) > 0) {
$pushArray['role'] = array_pop($classicRoles);
} else {
break;
}
对于角色数组的每个元素,从用户数组 (array_rand()) 中随机选择一个用户,并从可用用户数组中删除给定的用户密钥。
这应该可以解决问题。
foreach($classicRoles as $role) {
$userKey = array_rand($participantAssoc);
$currentUser = $participantAssoc[$userKey];
$currentUser['role'] = $role;
$participantsArray[] = $currentUser;
unset($participantAssoc[$userKey]);
}
标题差不多self-explanatory所以我就直接上题了
假设我有一些像这样的项目:
$classicRoles = [
'mafia',
'mafia',
'don',
'civilian',
'civilian',
'civilian',
'civilian',
'civilian',
'civilian',
'sherif'
];
现在执行查询后我得到下一个数组
while ($participantAssoc = mysqli_fetch_assoc($participantsQuery)) {
$pushArray['room_id'] = $participantAssoc['room_id'];
$pushArray['participant_id'] = $participantAssoc['participant_id'];
$pushArray['id'] = $participantAssoc['id'];
$pushArray['role'] = $participantAssoc['role'];
$pushArray['eliminated'] = $participantAssoc['eliminated'];
array_push($participantsArray, $pushArray);
}
这里一切都很好,除非我尝试下一个项目。
我试图给每个参与者一个角色:2 个黑手党角色,1 个唐角色,6 个平民和 1 个警长。
问题是我根本无法让它工作。
因此参与者计数只能因 1 项而异,但我们甚至假设参与者计数和角色计数彼此完全相等。所以现在,谁能告诉我如何使上述逻辑在 PHP 数组中发生? (给每个参与者一个角色:2 个黑手党角色,1 个唐角色,6 个平民和 1 个警长。)
如果参与者数小于或等于角色数,此方法有效。打乱角色数组以使其随机化:
shuffle($classicRoles);
然后在循环中,从角色数组中删除一个并分配给您的新数组:
$pushArray['role'] = array_pop($classicRoles);
你没有规定如果你的参与者多于角色应该发生什么,但是像这样:
if(count($classicRoles) > 0) {
$pushArray['role'] = array_pop($classicRoles);
} else {
break;
}
对于角色数组的每个元素,从用户数组 (array_rand()) 中随机选择一个用户,并从可用用户数组中删除给定的用户密钥。
这应该可以解决问题。
foreach($classicRoles as $role) {
$userKey = array_rand($participantAssoc);
$currentUser = $participantAssoc[$userKey];
$currentUser['role'] = $role;
$participantsArray[] = $currentUser;
unset($participantAssoc[$userKey]);
}