Hola tu codigo funciona bien pero comente en mi segundo mensaje que las etiquetas varian no son solo span. igual modificando un poco tu funcion ya esta listo. pero me surge otra duda y esta quiero hacerla con expresiones regulares supongamos esto;
Código HTML:
Ver original soy parrafo
<b style="background:green">fondo verde
</b> <span style="color:orange">naranja
<b>otra negrita
</b></span> fin parrafo
partiendo de este html (que las etiquetas varian pueden ser diferentes es decir no se sabe)seria guardar en un array el texto de cada etiqueta que sea exactamente igual teniendo en cuenta sus atributos tambien osea "<b>" no es lo mismo que "<b style='color:red'>" pongo un ejemplo para que se entienda mejor de como tendria que quedar el array.
Código array:
Ver originalArray
(
[p] => Array
(
[0] => soy parrafo fin parrafo
)
[span] => Array
(
[0] => soy rojo mas rojo
[1] => naranja
)
[b] => Array
(
[0] => negrita otra negrita
[1]=>fondo verde
)
)
se que con condiciones bucles y alguna cosa mas se puede lograr pero me gustaria hacerlo con expresiones como dije antes.