php脚本生成计划

时间:2016-12-08 11:58:36

标签: php html algorithm html-table

我想在一周内分发一些人员,每天有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>";
}   
?>

1 个答案:

答案 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";
}

DEMO

如果某人在第二天被分配到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";
}

DEMO