Provo a dare una soluzione alternativa:
Vediamo se ho capito, la situazione è che alcune righe hanno 'ARTISTA - BRANO - ANNO' e alcune solo 'ARTISTA -' dove dopo il trattino medio non c'è lo spazio, ho capito bene?
E ad ogni modo l'ordine delle parole è sempre quello, giusto?
Comunque, quello che puoi fare è usare la funzione preg_match_all in questo modo:
<?php
$row = 'ARTISTA - BRANO - ANNO';
\preg_match_all('/[a-zA-Z]+/', $row, $matches );
Qui il risultato: https://3v4l.org/PvdBg
Ora tutte le parole trovate sono contenute nell'array $matches[0] che puoi trattare in questo modo:
<?php
foreach ( $matches[0] as $word ) {
\printf(
'<br><span class="%1$s">%2$s</span>',
\strtolower( $word ),
$word
);
}
Il vantaggio è che non hai bisogno di usare le if e se $matches[0] fosse vuoto non printa nulla con il risultato che così il codice è più leggibile.