我想在一周内分发一些人员,每天有3次7h-15h 15-23h 23h-7h。
我不希望一个人在一天内出现多次的问题。 我想将人事清单分发到星期几我试试这个:
<?php
$input = array("Name1","Name2", "Name3","Name4");
$rand_keys = array_rand($input, 3);
?>
<table border=1>
<tr>
<th> Samedi </th> <th> Dimanche </th> <th> Lundi </th> <th> Mardi </th> <th> Merecredi </th> <th> Jeudi </th> <th> Vendredi </th>
</tr>
<tr>
<?php
$j=1;
for($i=0;$i<7;$i++){
echo "<td>";
for($k=0;$k<3;$k++){
echo $input[$rand_keys[0]] ."7H-15H\n" ;
echo $input[$rand_keys[1]] ."15H-23H\n" ;
echo $input[$rand_keys[2]] ."23H-7H\n" ;
}
echo "</td>";
}
?>
答案 0 :(得分:0)
您不需要第二个循环for ($k = 0; $k < 3; $k++)
,因为您已经使用3个echo
语句显示每个班次。
for($i=0;$i<7;$i++){
echo "<td>\n";
echo $input[$rand_keys[0]] ." 7H-15H\n" ;
echo $input[$rand_keys[1]] ." 15H-23H\n" ;
echo $input[$rand_keys[2]] ." 23H-7H\n" ;
echo "</td>\n";
}
您每周的每一天也使用相同的时间表。所以其中一个人从未被安排在整个星期。您可能应该每天将数组洗牌,而不仅仅是在脚本的开头。
for($i=0;$i<7;$i++){
echo "<td>\n";
shuffle($input);
echo $input[0] ." 7H-15H\n" ;
echo $input[1] ." 15H-23H\n" ;
echo $input[2] ." 23H-7H\n" ;
echo "</td>\n";
}
如果某人在第二天被分配到23H-7H
然后7H-15H
,则可以连续两班工作,您可以为该人设置变量,并检查是否有人把它们放在第一位。
$last_shift = $input[array_rand($input)];
for($i=0;$i<7;$i++){
echo "<td>\n";
shuffle($input);
while ($input[0] == $last_shift) {
shuffle($input);
}
echo $input[0] ." 7H-15H\n" ;
echo $input[1] ." 15H-23H\n" ;
echo $input[2] ." 23H-7H\n" ;
$last_shift = $input[2];
echo "</td>\n";
}