Vedi se ti torna utile. L'ho adattato a due soli periodi come nel tuo esempio ma lo puoi estendere ai prezzi di tutto l'anno. Ora devo scappare. Se hai problemi ti rispondo stanotte. 
Codice PHP:
// Definisco le date di inizio e di fine di ciascun periodo
$iniz_ordinaria1 = "2006-09-09";
$fine_ordinaria1 = "2006-09-20";
$iniz_ordinaria2 = "2006-09-21";
$fine_ordinaria2 = "2006-10-10";
// Setto le mie costanti relative ai prezzi stagioniali
define("PREZZO_ORDINARIA",35);
define("PREZZO_ALTA",40);
// La funzione, dati periodo di inizio e di fine, genera un array con tutte le date comprese
// nell'intervallo, estremi compresi
function crea_Array($da,$a,$arr = ''){
global $arr;
for($i = strtotime($da); $i<=strtotime($a); $i = strtotime("+1 day",$i))
$arr[] = date('Y-m-d',$i);
return $arr;
}
// Richiamo la funzione per crearmi l'array con tutte le date stagionali
$stagione = crea_Array($iniz_ordinaria1,$fine_ordinaria1);
$stagione = crea_Array($iniz_ordinaria2,$fine_ordinaria2);
// Date inizio e fine abbonamento
$inizio_abb = "2006-09-18";
$fine_abb = "2006-09-23";
// Mi permette di creare un nuovo array con la funzione anzichè accodare gli elementi
// all'array già esistente.
// Creo l'array con tutte le date relative al periodo dell'abbonamento
$abbonamento = crea_Array($inizio_abb,$fine_abb, $arr =array() );
echo '<pre>';
print_r($stagione);
print_r($abbonamento);
echo '</pre>';
// La funzione mi crea un nuovo array dove i valori dell'array passato (le date), diventano
// le chiavi del nuovo array e i valori sono i prezzi relativi al periodo.
function associa($array){
global $stagione;
for ($i = 0; $i < count($array); $i++){
$nuovo[$array[$i]] = ($i<=11 ? PREZZO_ORDINARIA : PREZZO_ALTA); }
return $nuovo;
}
// Richiamo la funzione
$mappato = associa($stagione);
echo '<pre>';
print_r($mappato);
echo '</pre>';
function costo_Abbonamento(){
$totale = 0;
global $abbonamento,$mappato;
foreach($abbonamento as $giorno){
// se il giorno dell'abbonamento corrisponde alla chiave dell'array stagionale aggiungo al totale
// il prezzo corrispondente
if(array_key_exists($giorno,$mappato))
$totale+= $mappato[$giorno];
}
return $totale;
}
echo costo_Abbonamento();
// 225 18-19-20 = 35*3 (105) + (21-22-23) = 40*3 (120) = 225
?>