Ver Mensaje Individual
  #8 (permalink)  
Antiguo 06/03/2014, 05:50
Avatar de fbedia
fbedia
 
Fecha de Ingreso: julio-2010
Mensajes: 159
Antigüedad: 13 años, 9 meses
Puntos: 8
Respuesta: Explorar cadena PHP

Cita:
Iniciado por enlinea777 Ver Mensaje
Mas facil no puedo entregartelo ("si puedo pero no quiero")
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);
  
$text=$considencias[1]; //esto se convierte en un array con las considencias
 
if(trim($text[0])!=""){
  return array(
true,$considencias);
  }else{
    return array(
false);
  }
}
$textos=explode("\n",$Texto);
foreach( 
$textos as $linea){
  
$resultado=extraer_si_hay($linea);
  if(
$resultado[0]){
    
$titulos[]=array("typo"=>substr($resultado[1][0][0],1,2),"texto"=>$resultado[1][1][0]);
  }
}
print_r($titulos);
?>
el resultado de esto es
Código PHP:
Array
(
    [
0] => Array
        (
            [
typo] => h1
            
[texto] => EnergÃ*a solar termica
        
)

    [
1] => Array
        (
            [
typo] => h2
            
[texto] => EnergÃ*a solar térmica de baja temperatura
        
)

    [
2] => Array
        (
            [
typo] => h2
            
[texto] => EnergÃ*a solar térmica de media temperatura
        
)

    [
3] => Array
        (
            [
typo] => h1
            
[texto] => EnergÃ*a solar fotovoltaica
        
)

    [
4] => Array
        (
            [
typo] => h2
            
[texto] => Paneles solares fotovoltaicos
        
)


Un millón de gracias!
Es mas que suficiente! con esto he conseguido hacer justo lo que quería

He tardado aproximadamente 1 hora en entender el código! y aun asi alguna parte no he terminado de verla clara del todo... pero funciona perfectamente :)
No es que dude de mis capacidades jeje, pero creo que por mi cuenta no hubiese dado con este algoritmo en mucho tiempo!

Dejare a continuacion como me quedo el código final... aunque a estas alturas creo que ya no aporta mucho, quizas venga bien a algún otro lector:

articulos.php
Código PHP:
Ver original
  1. $Texto = $txt[0];
  2.            
  3.             $textos=explode("\n",$Texto); //array (textos) que contiene en cada valor del array, el texto separado por saltos de linea.
  4.             foreach( $textos as $linea){ //recorro valor a valor el array creado arriba
  5.               $resultado=extraer_si_hay($linea);
  6.               if($resultado[0]){
  7.                 $titulos[]=array("typo"=>substr($resultado[1][0][0],1,2),"texto"=>$resultado[1][1][0]);
  8.               }
  9.             }
  10.             //print_r($titulos[2]["texto"]);
  11.             $contenidoTotal = count($titulos);
  12.            
  13.             if($contenidoTotal>=1) {
  14.                 echo "<h2>".$indiceContenido[$_SESSION['lang']]."</h2>
  15.                 <nav id='secondary-navigation'>
  16.                     <ul>
  17.                 ";
  18.            
  19.                 for($auxTitulos=0;$auxTitulos<$contenidoTotal;$auxTitulos++) {
  20.                     //echo $titulos[$auxTitulos]["texto"];
  21.                     echo "<li class='".$titulos[$auxTitulos]['typo']."'><a href='#".$titulos[$auxTitulos]['texto']."'>".$titulos[$auxTitulos]['texto']."</a></li>";
  22.                 }
  23.                
  24.                 echo "</ul>
  25.                 </nav>";
  26.             }

la funcion la tengo en otro fichero de "funcionesGenerales.php" que esta en un include()
Esta esta tal y como me la dejaste:
Código PHP:
Ver original
  1. function extraer_si_hay($Texto){
  2.     $expresion="/\<h.\>(.*)\<\/h.\>/"; // esto quire decir lo que este entre <h*> y </h*>
  3.     preg_match_all($expresion,$Texto,$considencias);
  4.     $text=$considencias[1]; //esto se convierte en un array con las considencias
  5.     if(trim($text[0])!=""){
  6.         return array(true,$considencias);
  7.     }else{
  8.         return array(false);
  9.     }
  10. }

Gracias a todos por su ayuda.
@hss, ley también tus enlaces que nunca esta de mas! no llegue a probar nada... pero me han venido bien.

Un saludo.
__________________
Follow me on twitter @franbedia