Eine umständliche Möglichkeit zwar, das Problem zu lösen, dass ein Mitarbeiter nur eingeteilt wird, wenn er auch kann. Es wird ein Array $mitarbeiter gebildet. In dem Array ist ein Array für jeden Tag des Monats enthalten. Und in diesem Array müssen jeweils alle Mitarbeiter aufgeführt werden, die an diesem Tag auch könnten:
PHP-Code:
$mitarbeiter[01]=array("Manfred", "Heinz", "Marianne");
$mitarbeiter[02]=array("Manfred", "Marianne"); //HEINZ HAT AM 2. DES MONATS ALSO FREI
$mitarbeiter[03]=array("Marianne");
// USW. FÜR DIE RESTLICHEN TAGE DES MONATS
Anschließend kannst du den Mitarbeiter so auswählen:
PHP-Code:
if($in_array(str_pad($i, 2, "0", STR_PAD_LEFT), $urlaubstage)){
echo "<td>Restaurant geschlossen</td>";
}
//SONST MITARBEITER EINFÜGEN
else{
$x=mt_rand(1, count($mitarbeiter[str_pad($i, 2, "0", STR_PAD_LEFT)]));
$schicht=$mitarbeiter[str_pad($i, 2, "0", STR_PAD_LEFT)][$x-1]
echo "<td>" . $schicht . "</td>";
}
Um dann zu verhindern, dass dieser Mitarbeiter am nächsten Tag wieder eine Schicht bekommt, müsstest du aus dem Array für den nächsten Tag das Element mit diesem Mitarbeiter entfernen:
PHP-Code:
$z=$i+1;
$akt_array=$mitarbeiter[str_pad($z, 2, "0", STR_PAD_LEFT)];
if(in_array($schicht, $akt_array){
$pos=array_search($schicht, $akt_array);
unset($array[$pos]);
}
Das Beispiel ist nicht getestet, aber eigentlich sollte es so funktionieren, denke ich.