<?php
    
$dia = "01";
$mes = "04";
$ano = "2018";
$data = $dia."-".$mes."-".$ano;

$dia_da_semana_array = array('Domingo', 'Segunda', 'Terca', 'Quarta', 'Quinta', 'Sexta', 'Sabado'); // lista
$meses_array = array('', 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'); // lista
$dia_da_semana_inicial = date('w', strtotime($data)); // pega o dia da semana em inteiro
$dia_da_semana_inicial_string = $dia_da_semana_array[$dia_da_semana_inicial];  // pega o dia da semana  em string

$arraySemanas = array(); // lista das semanas

$x = (int)$dia_da_semana_inicial;
$y = 0;

$semana = 1;
while(true){
	
	// insere no array
	$indexMes = (int)$mes;
	$arraySemanas[$semana][$y]['day_week'] = $data; 
	$arraySemanas[$semana][$y]['day_name'] = $dia_da_semana_array[$x];
	$arraySemanas[$semana][$y]['month_name'] = $meses_array[$indexMes];
	
	// verifica se mudou o mês
	$data = date('d-m-Y', strtotime("+1 day", strtotime($data)));
	$dataVerifi = explode("-", $data);
	if($dataVerifi[1] != $mes){
		// se mudou o mes para o loop
		break;
	}
	
	if($x == 6){
		$x = 0;
		$y = 0;
		$semana++;
	} else {
		$x++;
		$y++;
	}
	
}

print_r(json_encode($arraySemanas));