无法使用PHP将用户分配到相等的组中

kmb7vmvb  于 2022-12-02  发布在  PHP
关注(0)|答案(2)|浏览(210)

这是我提出的关于堆栈溢出的第一个问题。我是一个新手。
我尝试自动将学生随机分配到相同的(如果分配的是奇数,则基本上是相同的)组中。现在,我只是尝试生成组分配。稍后,这些信息将存储在数据库中(还没有),教师将能够修改组的数量。
我可以把学生随机分到不同的小组,但不能平均分配。我觉得问题出在:

while ($rand_num == $value && $group_count[$rand_num] >= $group_size)

它看起来不像是在进行比较,也不像是在忽略&&之后的所有内容。

<?php
$group_array = array("Abby" => 0 , "Billy" => 0 , "Cathy" => 0 , "Dillan" => 0, "Elizabeth" => 0 , "Fred" => 0 , "Geofery" => 0 , "Hank" => 0, "Ingrid" => 0 , "Jacob" => 0 , "Kylie" => 0 , "Lenord" => 0);

$class_size = count($group_array);
$num_groups = 3;
$group_size = $class_size / $num_groups;
$group_count = (array_count_values($group_array));

foreach ($group_array as $key => &$value) {
    $rand_num = rand(1 , $num_groups);      
    while ($rand_num == $value && $group_count[$rand_num] >= $group_size) {
        $rand_num = rand(1 , $num_groups);
    };
    $value = $rand_num;
    $group_count = (array_count_values($group_array));
};
//Group Assignments
var_dump($group_array);
//Users in each group
var_dump($group_count);
?>

我做错了什么?

rjee0c15

rjee0c151#

我建议你用一个更简单更干净的方法。
4组示例:
1.让学生随机洗牌
1.分配组0、1、2、3、0、1、2、3、0、1、2、3等。
您可以像这样实现它:

<?php
$n_groups = 4;
$students = array("Abby", "Billy", "Cathy", "Dillan", "Elizabeth", "Fred",
    "Geofery", "Hank", "Ingrid", "Jacob", "Kylie", "Lenord");

shuffle($students);  // put students in random order
$groups = []; // init empty groups
foreach($students as $position => $student) {
    $groups[$student] = $position % $n_groups;  // put student into group based on his position (first student gets 0, then 1, 2, 3, then 0 again etc.)
}
print_r($groups);
cnh2zyt3

cnh2zyt32#

为什么你的$group_array有学生的名字作为键?这有什么目的吗?
我想出了这个办法:

$students_array = ['Abby', 'Billy', 'Cathy', 'Dillan', 'Elizabeth', 'Fred', 'Geofery', 'Hank', 'Ingrid', 'Jacob', 'Kylie', 'Lenord', 'Katy'];
shuffle($students_array);

$class_groups = 3;
$groups = [];

foreach ($students_array as $key => $student) {
    
    $assigned_group = $key % $class_groups;
    $groups[$assigned_group][] = $student;      
}

print_r($groups);

我使变量更具可读性,并将学生分组放入一个数组中。
在这种情况下,你得到一个奇数的学生,你将结束与一组有+1学生。
我认为你的问题是试图将学生随机分配到组中,将他们按顺序分配到组中将确保组中的学生人数相等。
至于$key % $class_groups值,它使用了php的'modulus'算术运算符。
计算机语言中的“mod”运算符就是余数。例如,
17模3 = 2
因为
17 / 3 = 5雷姆2
这又意味着
17 = 3 * 5 + 2
使用负数时会出现一些棘手的问题,但通常不需要这样做。
在数学(数论)中,这个术语的用法有点不同。“模数”实际上不是余数,而是你要除以的数;而“mod”不是一个运算符,而是一个标签,告诉我们“在什么意义上两个量被认为是全等的,或者相等的。”例如,我们可以说
17 = 11(模3)
(read如“17与11全等,模3”),这意味着17和11除以3的余数相同。如果您只是阅读有关编程的内容,可能不会看到这种用法,但如果您深入了解它背后的数学,就值得注意这种用法。
您可以从here.中读取

相关问题