我有两个数组。一个数组$People
目前创建了44个人。让我们假设它当前是
$People = array('1','2',...,'44');
。
我有另外一个包含15个元素的数组。
$Test = array('A','B',...'O');
现在我希望能够将测试随机分配给每个人。我知道如何在php中使用随机函数。
它对我来说很棘手,我需要帮助的是如何平衡测试阵列。我的意思是,因为目前有44个人(这个阵列将来会增长),我想要的是14个测试版本有3个人,1个版本有2个。所以我希望测试阵列均匀。我还希望它能够处理$People
数组的增长。
Ex:测试版本D将有个人'' 25' 25。每个其他版本都有三个随机个体。
我想出的很少的想法就像在$Test
数组上运行随机整数,哪个最高/最低得到2个人,其余三个。当我增加$People
数组的大小时,这会产生问题;处理我虽然使用模数来预先确定偶数$Test
的数量。
我可以做到这一点和其他想法,但我很确定必须有更好的方法来做到这一点。
答案 0 :(得分:1)
澄清您的情况:
您希望在$People
数组中随机分发$Test
内的值。您声明的问题是$People
中的值的数量并不总是可以通过$Test
中的值的数量完全分割,并且您不确定如何将代码实现到均匀分配值。
建议的解决方案:
您可以从foreach
的混洗版本中随机逐个获取$People
循环中的值,并将它们放入名为$Result
的新数组中。如果您从已混洗的$People
数组中提取了所有值,则还需要进行条件检查:if($count>=$arrayCount)
其中$arrayCount=$count($shuffledPeople);
。如果您已获得所有值,则首先将$bool
值设为false(以便不再遍历while
循环,然后break;
从foreach
中取出$Result =[];//the array containing the results
$shuffledPeople = $People;
shuffle($shuffledPeople);//mixing up the array
$arrayCount = count($shuffledPeople);//finding the total amount of people
$count = 0;
$bool = TRUE;
while ($bool)
{
foreach($Test as $value)
{
$Result[$value][] = $shuffledPeople[$count];
$count++;
if ($count>=$arrayCount)
{
$bool = FALSE;
break;
}
}
}
}循环。
foreach ($Result as $key => $value)
{
echo "{$key}: <br>";
if (is_array($value))
{
foreach ($value as $something)
{
echo "-->{$something}<br>";
}
}
else
{
echo "-->{$value}<br>";
}
}
要查看结果,您只需要:
ID DATE
1 2016-01-04
2 2016-01-05
3 2016-01-01
4 2016-01-02
5 2016-01-03
答案 1 :(得分:0)
我相信这就是你想要做的......
假设你有$ people和$ test数组。你想知道每次测试有多少人......
$ppt = ceil(sizeof($people)/sizeof($test));
现在,$ ppt是每次测试的人。下一步是改组人员,以便他们被随机分配到测试中。
shuffle($people);
现在,我们可以将人们分成子阵列,以便将每个子阵列分配给测试。请记住,这些块现在是随机的,因为我们改组了。
$chunks = array_chunk($people, $ppt);
现在,$ chunks [0]中的每个人都会接受$ test [0]。 $ chunks [1]中的每个人都会接受$ test [1]。 $ chunks [2]中的每个人都会接受$ test [2]。