2017-02-20 8 views
0

内のテキスト分割:ドムは、私はこのようなHTML文字列を持っているヘッダーや段落

<h2>Header 1</h2> 
    <p>Example line 1</p> 
    <p>Example line 2</p> 
    <p>Example line 3</p> 
<h2>Header 2</h2> 
    <p>Example line 1</p> 
    <p>Example line 2</p> 
... 

を私は最終的にはTwitterのブートストラップタブHTMLにこれを変換したいです。私は1つ(または2)の配列(複数可)内の文字列を持っていることを好むことを行うことができるようにするには:

'Header 1' => '<p>Example line 1</p><p>Example line 2</p><p>Example line 3</p>' 
'Header 2' => '<p>Example line 1</p><p>Example line 2</p>' 

私が今持っているもの:

$source = new \Htmldom(); 
$source->load($string); 

foreach ($source->find('h2') as $item) 
    { 
    $tabs[] = $item->innertext; 
    $panels[] = $item->next_sibling()->innertext; 
    } 

これは私の配列を与えますヘッダーおよびこれらのヘッダ(この例では、段落)の最初の兄弟を持つ配列:もちろん

array (size=2) 
    0 => string 'Header 1' (length=10) 
    1 => string 'Header 2' (length=9) 

array (size=2) 
    0 => string '<p>Example line 1</p>' (length=312) 
    1 => string '<p>Example line 1</p>' (length=112) 

は私がすべての段落だけではなく、最初のものを持っていると思います。このアプローチではこれは不可能だと私には思われます。私が間違っている?どうすればこれを達成できますか?

+0

私は '

+0

HTMLを解析するために使用しているライブラリへのリンクも教えてください。 –

+0

@michail_w Typo、修正済み!ライブラリはSimplePHPDomです。それとも他のものでも問題ありません。 – Klaaz

答えて

0

要素をループし、h2のループを停止しようとします。

例:

foreach ($source->find('h2') as $item) 
    { 
    $tabs[] = $item->innertext; 
    $next_sibling=true; 
    $item_next=$item;  
    while($next_sibling){ 
     $item_next=$item_next->next_sibling(); 
     $panels[$item->innertext][] = $item_next->innertext; 
     if($item_next->next_sibling() == null || $item_next->next_sibling()->tag == 'h2') 
      $next_sibling=false;  

    }   
    } var_dump($tabs); var_dump($panels); 

O/P:

array (size=2) 
    0 => string 'Header 1' (length=8) 
    1 => string 'Header 2' (length=8) 
array (size=2) 
    'Header 1' => 
    array (size=3) 
     0 => string 'Example line 1' (length=14) 
     1 => string 'Example line 2' (length=14) 
     2 => string 'Example line 3' (length=14) 
    'Header 2' => 
    array (size=2) 
     0 => string 'Example line 1' (length=14) 
     1 => string 'Example line 2' (length=14) 
関連する問題