I due punti sono una sintassi standard di php:

O scrivi:
foreach() {}

o scrivi:
foreach():
endforeach;

è una sintessi che io preferisco, perchè le parentesi graffe son tutte uguali e se hai un if annidato dentro un for annidato dentro un while, ti sfido a capire quale graffa chiude quale costrutto!

Si, il doppio $ è per avere una variabile identificata da un nome contenuto a sua volta in un'altra veriabile, anche se ti confesso che io avrei usato un array più generale con una dimensione i più e via...

$dati["alias"][][]
$dati["pinco"][][]

e così via...