在PHP中将随机但偶数的数据从数组分配给列表数组?

时间:2016-05-23 17:03:52

标签: php arrays random

我有两个数组。一个数组$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的数量。

我可以做到这一点和其他想法,但我很确定必须有更好的方法来做到这一点。

2 个答案:

答案 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]。