2017-03-29 1 views
1

J'ai des blocs de <h2> mais sans attributs. Après cela aller blocs de <p> sans attributs.PHP Simple HTML DOM Parser - comment travailler avec des répétitions de bloc

Structure de cette ressemblait à ceci:

<h2></h2> 
<p></p> 
<p></p> 
<p></p> 
<h2></h2> 
<p></p> 
<p></p> 
<h2></h2> 
<p></p> 

J'utilise Php simple HTML DOM Parser. Je veux obtenir des données de bloc <h2>, après cela obtenir tous <p> à un autre <h2> et ainsi de suite. Mais tous les <h2> doivent être connectés à <p> qui les suivent. Je pensais utiliser key => value (exemple <h2> => <p>,<p>,... et un autre <h2>) mais je ne suis pas sûr de savoir comment faire.

Aussi, je connais environ next_sibling(), mais je ne sais pas comment l'utiliser en boucle. J'ai fait 2 variables, le 1er a tous <h2>, le 2ème a <p>. Je pensais que cela pouvait être utile pour mon objectif. Voici le code:

$test = file_get_html('url'); 
foreach($test->find('h2') as $test2) { 
    echo $test2 . '<br>'; 
    foreach($test->find('p') as $test3) { 
    echo $test3 .'<br>'; 
    } 
} 
+0

Robin Mackenzie, merci, que vous avez édité ma question.)) –

Répondre

1

Il est pas super clair ce que vous cherchez, mais voici une idée pour vous aider à démarrer:

foreach($html->find('h2') as $el){ 
    $h2 = $el; 
    while($el = $el->next_sibling()){ 
    if('p' != $el->tag) break; 
    // do something 
    } 
} 
+0

Merci beaucoup. Votre code aide très bien.) –

0

Réponse de ma question ici. J'espère que cela peut aider quelqu'un!)

`foreach ($html->find('.div') as $div) 
    { 
     if(!$next=$div->next_sibling()) continue; 
      if($next->tag==='h2') 
      { 
       $h2 =$next; 
       echo $h2; 

       while ($h2 = $h2->next_sibling()) 
       { 
        if(!$h2->tag=='p') break; 
        { 
         $p =$h2; 
         echo $p; 
        }  
       } 
       while ($h2 = $h2->next_sibling()) 
       { 
        if(!$h2->tag=='table') break; 
        { 
         $tab =$h2; 
         echo $tab; 
        }  
       } 
       while ($h2 = $h2->next_sibling()) 
       { 
        if(!$h2->tag=='ul') break; 
        { 
         $ul =$h2; 
         echo $ul; 
        }  
       } 
      } 
      else continue; 
    }`