$gram è un array di array in cui le parole inserite sono le prime chiavi ($parola) e i campi del record le seconde chiavi.
Cerco di spiegarmi meglio con un esempio: per la frase "il cane è un animale" la stampa che viene fuori è la seguente:
query:SELECT * FROM `parole` where `nome` = 'il'
Sgram:Array ( [Nome] => il [Tipo] => art.d.m.s. [persona] => [riferimento] => )
query:SELECT * FROM `parole` where `nome` = 'cane'
Sgram:Array ( [Nome] => cane [Tipo] => s.m. [persona] => [riferimento] => )
query:SELECT * FROM `parole` where `nome` = 'è'
Sgram:Array ( [Nome] => è [Tipo] => [persona] => [riferimento] => )
query:SELECT * FROM `parole` where `nome` = 'un'
Sgram:Array ( [Nome] => un [Tipo] => art.i.m.s. [persona] => [riferimento] => )
query:SELECT * FROM `parole` where `nome` = 'animale'
Sgram:Array ( [Nome] => animale [Tipo] => s.m. [persona] => [riferimento] => )
Come puoi vedere vengono stampati per ogni parola i valori dei campi, tranne che per la parola "è", della quale viene stampato il valore del campo nome e nient'altro, come se gli altri campi del record fossero vuoti.
p.s. avevo modificato lo script inserendo la stampa della query prima di postare il risultato, questa ulteriore stampa non la trovi nello script che ho postato precedentemente.