Credo che il problema stia nel fatto che hai aggiunto due righe in rowSpaned()
Codice PHP:
function rowSpaned($arr){  
return 
'<tr><td>'.$arr['inizio'].'</td> 
            <td>'
.$arr['fine'].'</td></tr>';
            
/*<td>'.$arr['prezzo_singola'].'</td> 
            <td>'.$arr['prezzo_doppia'].'</td> */

In pratica devi gestire ogni singola colonna separatamente dalle altre tenendo conto del valore di rowspan calcolato. Se la seconda cella di una riga ha lo stesso valore delle 2 celle sottostanti allora ha rowspan 3 quindi dovrai omettere dalla tabella le 2 celle sottostanti successive. E questo discorso lo dovresti fare per ogni colonna. Il codice che ti ho postato tiene conto solo dei vaolri relativi al prezzo_singolo.