Estimado hhs los parser's se balen de codigos con expreciones regulares para hacer su trabajo si no lo sabias, claro esta que para el usuario promedio le es dificil entender las expreciones regulares por eso se inventan ese tipo de cosas, y bueno para proyectos grandes es mas facil el parser que crear una exprecion por cada necesidad.
Para los que lleguen despues, les dejo el codigo explicado
Código PHP:
<?php
$Texto="<h1>Energía solar termica</h1>
<p>La energía solar térmica (o energía termosolar) consiste en el aprovechamiento de la energía del Sol para producir calor que puede aprovecharse para cocinar alimentos o para la producción de agua caliente destinada.....</p>
<h2>Energía solar térmica de baja temperatura</h2>
<p>Una instalación solar térmica de baja temperatura está formada por captadores solares, un circuito primario y secundario, intercambiador de calor....</p>
<h2>Energía solar térmica de media temperatura</h2>
<p>Las instalaciones de temperatura media pueden usar varias diseños, los diseños más comunes son: glicol a presión, drenaje trasero, sistemas de lote y sistemas....</p>
<h1>Energía solar fotovoltaica</h1>
<p>La energía solar fotovoltaica consiste en la obtención de electricidad24 obtenida directamente a partir de la radiación solar mediante....</p>
<h2>Paneles solares fotovoltaicos</h2>
<p>Un panel fotovoltaico consiste en una asociación de células, encapsulada en dos capas de EVA (etileno-vinilo-acetato), entre una lámina frontal de vidrio y una capa....</p>";
function extraer_si_hay($Texto){
$expresion="/\<h.\>(.*)\<\/h.\>/"; // esto quire decir lo que este entre <h*> y </h*>
preg_match_all($expresion,$Texto,$considencias); // hace las comparaciones
$text=$considencias[1]; //esto se convierte en un array con las considencias
if(trim($text[0])!=""){ // consulto la primera y en este caso la unica concidencia
return array(true,$considencias); // devuelvo un areglo con valor 0=true y 1=todala info extraida por las considencias de las etiquetas header
}else{
return array(false);// si no saco nada devuelvo falso
}
}
$textos=explode("\n",$Texto); //separo por lineas en este caso funciona por que las etiquetas <h1>,<h2>,<h3>, etc... son de una sola linea
foreach( $textos as $linea){ // recorro linea a linea
$resultado=extraer_si_hay($linea); // ejecuto la funcion anterior mandando la linea
if($resultado[0]){ //reviso el resultado del areglo en el valor 0 que debe ser verdadero o falso
$titulos[]=array("typo"=>substr($resultado[1][0][0],1,2),"texto"=>$resultado[1][1][0]);// Genero un nuevo arreglo extrayendo el tipo e etiqueta h1,h2,h3, etc. y e texto de ella.
}
}
print_r($titulos); //Imprimo los resultados
?>