Considera che tutto quello che si trova tra " doppi apici sia una stringa. ECHO, PRINT INCLUDE e qualcun altro, non sono vere FUNZIONI ma costruttori. Una variabile dentro ad un costruttore di stringa viene risolta se:

1) si trova tra doppi apici. In questo caso e' una stringa e non una costante / funzione e verra' risolta.
echo "stringa $row[data] stringa";

2) Se viene connessa alla stringa del costruttore tramite un . punto. In questo caso e' un array associativo in cui bisogna definire l'indice come stringa.
echo "stringa". $row['data']. "stringa";

3) si "isola" l'array con parentesi graffe dal costruttore in cui si trova e lo si considera come "dato esterno" al costruendo. in questo caso si usano le parentesi graffe e l'indice associativo con le apici.
echo "stringa {$row['data']} stringa";

Molti preferiscono quest'ultima forma, perche' evita di valutare ogni volta dove ti trovi e cosa fai. copi e incolli senza badare alle virgolette dell'indice associativo. A livello di performance non ci sono valutabili differenze.

Spiegato con linguaggio maccheronico vulgaris, ma questa e' la sostanza.