L'ultima cosa poi mi metto a letto:
In GenerateWord tu restituisci un array completo che poi vai a concatenare alla stringa $s che restituisci in generate sentence.

Quando usi Row usi in pratica array di array... e credo che sia questo che ti incasina la stampa. Row accetta in ingresso un array semplice...

Vedi tu.. non mi rendo conto nemmeno se ho detto minkiate