簡體   English   中英

將段落拆分為多維數組

[英]Split paragraphs into multidimensional array

我正在嘗試將一些HTML信息放入數組中。

<p>Title 1</p>
<p><span>Content 1</span></p>
<p><span>Content 2</span></p>

<p>Title 2</p>
<p><span>Content 1</span></p>
<p><span>Content 2</span></p>
<p><span>Content 3</span></p>

我想將它們放在帶有“標題”和“內容”字段的數組中。 我的問題是將那些具有跨度且屬於同一標題的p標簽放在一起。

結果應為:(strip_tags表示標題,而span表示內容)

[0]['title'] => 'Title 1',
[0]['content'] => ' <p>Content 1</p><p>Content 2</p>',
[1]['title'] => 'Title 2',
[1]['content'] => ' <p>Content 1</p><p>Content 2</p><p>Content 3</p>',

我的嘗試:

$paragraphs = explode('<p>', $html);
for ($i = 0 ; $i < count($paragraphs) ; $i++) {
    $paragraphs[$i] = '<p>' . $paragraphs[$i];
    if (strpos($paragraphs[$i], '<span') !== false) $content .= $paragraphs[$i];
    else $title = $paragraphs[$i];
}

但這會將所有內容合並到一個變量中。 我需要上面的數組...

您需要實現自己的計數器來檢查標題更改。

$output = array();
$last_title=''; // store last title for reference
$counter=-1; //your counter
$paragraphs = explode('<p>', $html);
for ($i = 1,$c=count($paragraphs) ; $i < $c ; $i++) { //start from the second as there is always a blank row
    $paragraphs[$i] = '<p>' . $paragraphs[$i];
    if (strpos($paragraphs[$i], '<span') !== false) {
        $output[$counter]['content'] .= trim(strip_tags($paragraphs[$i],'<p>'));
    }
    else $title = $paragraphs[$i];
    if ($title != $last_title){
        $last_title = $title;
        $counter++;
        $output[$counter]['title'] = strip_tags($title);
        $output[$counter]['content'] = '';
    }
}
print_r ($output);

注意:我仍然建議使用PHP DOM。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM