在PHP中,将数组中的随机偶数分配给列表数组?
我有两个数组。一个数组在PHP中,将数组中的随机偶数分配给列表数组?,php,arrays,random,Php,Arrays,Random,我有两个数组。一个数组$People当前创建44个个体。让我们假设它现在 $People=array('1','2',…,'44') 我还有一个15个元素的数组 $Test=array('A','B',…'O') 现在我希望能够将测试随机分配给每个人。我知道如何在php中使用随机函数来实现这一点 这对我来说很棘手,我需要帮助的是如何平衡测试阵列。我的意思是,由于目前有44个个体(这个阵列在未来会增长),我希望14个测试版本有3个个体,1个版本有2个。所以我想让测试阵列平衡。我还希望它能够随着$P
$People
当前创建44个个体。让我们假设它现在
$People=array('1','2',…,'44')代码>
我还有一个15个元素的数组
$Test=array('A','B',…'O')代码>
现在我希望能够将测试随机分配给每个人。我知道如何在php中使用随机函数来实现这一点
这对我来说很棘手,我需要帮助的是如何平衡测试阵列。我的意思是,由于目前有44个个体(这个阵列在未来会增长),我希望14个测试版本有3个个体,1个版本有2个。所以我想让测试阵列平衡。我还希望它能够随着$People
数组的增长而处理
例如:测试版本D将有单独的'4','25'。每隔一个版本有三个随机个体
我提出的一些想法是,在$Test
数组上运行随机整数,哪个最高/最低得到2个个体,其余3个。当我增加$People
数组的大小时,会出现问题;为了解决这个问题,我想先用模来计算一下$Test的偶数
我可以做到这一点和其他想法,但我确信一定有更好的方法来做到这一点。我相信这就是你想要做的
假设您有$people和$test数组。你想知道每次测试有多少人
$ppt = ceil(sizeof($people)/sizeof($test));
现在,$ppt是每次测试的人数。下一步是将这些人随机分配到测试中
shuffle($people);
现在,我们可以将人员分成子数组,这样每个子数组都被分配给一个测试。记住,现在块是随机的,因为我们洗牌了
$chunks = array_chunk($people, $ppt);
现在,$chunks[0]中的每个人都将参加$test[0]。$chunk[1]中的每个人都将参加$test[1]。$chunk[2]中的每个人都将参加$test[2]。澄清您的情况:
您希望在$Test
数组中随机分配$People
中的值。您所说的问题是,$People
中的值的数量并不总是可以完全除以$Test
中的值的数量,并且您不确定如何实现代码来均匀分布值
建议的解决方案:
您可以从无序版本的$People
中逐个随机获取foreach
循环中的值,并将它们放入名为$Result
的新数组中。如果已从无序排列的$People
数组中提取所有值,则还将进行条件检查:if($count>=$arrayCount)
其中$arrayCount=$count($shuffledPeople)代码>。如果已获得所有值,则首先将$bool
值设为false(以便不再在while
循环中迭代,然后将从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>";
}
}
foreach($Result as$key=>$value)
{
回声“{$key}:
”;
if(是_数组($value))
{
foreach($something的值)
{
回声“->{$something}
”;
}
}
其他的
{
echo“->{$value}
”;
}
}
我的答案对你有用吗?我一直在“$Result[$Test]=$shuffledPeople[$Count];”@USER420编辑我的代码,忘记在$Result[$Test]之后添加[]
仍然是相同的错误。$Test和$People都是字符串数组。@USER420 k 1秒,我将在我的站点上运行代码,看看有什么改进。这很有趣,因为我刚刚要提到它,因为$Unit是数组。谢谢,它工作了44。我所做的是将我的People数组的大小更改为34,看看它是否工作,但失败了这里。我的$chunks是一个长度为12的二维数组,而我的$Test数组的长度为14。这意味着永远不会给出两个测试版本的测试。这是设计的。有34人和14个测试,最公平的划分方法是11个测试中的3人,1个测试中的1人。这就剩下2个测试未使用。如果你想这样做的话确保每个测试都被使用,在进行$ppt计算时使用floor而不是ceil,然后将$chunks数组的late元素一个接一个地分布在测试上。