$tatil_gunleri = array('15.07.2021','30.08.2021');
$baslangic = '13.07.2021';
$toplam = 15;
$_baslangic = strtotime($baslangic.' 00:00:01');
$_artik_gunler = array();
$_izinli_gunler = array();
foreach(range(1,$toplam) as $day){
$gun = $day*86400;
$bugun = $_baslangic+$gun;
$haftanin_gunu = date('w',$bugun);
if(in_array($tatil_gunleri,date('d.m.Y',$bugun))!==false || $haftanin_gunu==5 || $haftanin_gunu==6){
$_artik_gunler[] = date('d.m.Y',$bugun);
}else{
$_izinli_gunler[] = date('d.m.Y',$bugun);
}
}
if(!empty($_artik_gunler)){
$kalan = count($_artik_gunler);
$_izinli_son_gun = end($_izinli_gunler);
foreach(range(1,$kalan) as $day){
$gun = $day*86400;
$bugun = $_izinli_son_gun+$gun;
$haftanin_gunu = date('w',$bugun);
if(in_array($tatil_gunleri,date('d.m.Y',$bugun))!==false || $haftanin_gunu==5 || $haftanin_gunu==6){
$_artik_gunler[] = date('d.m.Y',$bugun);
}else{
$_izinli_gunler[] = date('d.m.Y',$bugun);
}
}
}gibi birşeyle halledilebilir
basitce yazdim ama artik gunleri tekrar tatile gelmemesi için döngüye sokmak gerekir