2017-02-20 9 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 Bootstrap вкладок Html. Для того, чтобы быть в состоянии сделать это, я предпочитаю иметь строку в один (или два) массив (ы):

'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); 

о/р:

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) 

 Смежные вопросы

  • Нет связанных вопросов^_^