Si conoces la sintaxis del bucle "foreach" ...
Lo que hace es leer una posición del array $smiles en cada pasada y guardar su clave en la variable $smile y su valor en la variable $imagen...
O sea que en este caso la primera pasada hará la siguiente asignación:
$smile = "[:)]";
$imagen = "riendose.gif";
.. que corresponeden a la primera posición del aray "$smiles"
Y ejecutará el ereg_replace.
Y así sucesivamente con todas las posiciones del array...
Saludos