簡體   English   中英

PHP 將 html 字符串拆分為數組

[英]PHP Split html string into array

我希望我能從你們那里得到一些幫助。

這就是我正在努力解決的問題,我有一串 HTML 看起來像這樣:

<h4>Some title here</h4>
<p>Lorem ipsum dolor</p>
(some other HTML here)

<h4>Some other title here</h4>
<p>Lorem ipsum dolor</p>
(some other HTML here)

我需要將所有<h4>與其余內容分開,但例如第一個<h4>和第二個<h4>之前的內容需要與第一個<h4> ,如下所示:

Array {
       [0] => <h4>Some title here</h4>
       [1] => <p>Lorem ipsum dolor</p>
}

Array {
       [0] => <h4>Some other title here</h4>
       [1] => <p>Lorem ipsum dolor</p>
}

這是為了構建一個手風琴(很難解釋為什么我要這樣做,但它必須是這樣), <h4>將是手風琴面板的標題,單擊時它將展開並顯示關聯的內容跟他們。

我希望我說清楚了我的問題,讓我知道你的想法以及我應該如何更好地做到這一點。

我正在研究DOMDocument ,但我也嘗試過explode()但沒有成功。

我使用 JavaScript 進行了這項工作,但我需要使用 PHP 實現相同的功能,但是使用 PHP 使用 DOM 非常復雜。

先感謝您。

按照Derek S給我的例子,我能夠做我想做的事。

這是結果:

$html_string = 'HTML string';
$dom = new DOMDocument();
$dom->loadHTML($html_string);

foreach($dom->getElementsByTagName('h4') as $node) {
   $title = $dom->saveHTML($node);
   $content[$title] = array();

   while(($node = $node->nextSibling) && $node->nodeName !== 'h4') {
      $content[$title] = $dom->saveHTML($node);
   }
}

這將保存$title$content[$title]的對應內容。

你可以嘗試這樣的事情:

preg_split("/<h4>.+</h4>/i", $html);

這應該做你想做的——盡管我確信還有其他(可能更好)的方法

$aHTML = explode("<h4>", $cHTML);
foreach ($aHTML AS $nPos => $cPanel) {
  if ($nPos > 0) {
    $aPanel = explode("</h4>", $cPanel);
    $cHeader = "<h4>" . $aPanel[0] . "</h4>";
    $cPanelContent = $aPanel[1];
  }
}

它沒有把它放在你規定的數組格式中——盡管你可以在循環中自己做。 否則,您的內容可能會在循環內輸出/構建。

編輯:為了完整起見,重新添加了 h4 和 /h4

您可以使用相同的代碼,只需稍作改動,它將適用於各種非正常 HTML。

        $html_string = 'HTML string';
        $dom = new DOMDocument();
        $dom->loadHTML($html_string);

        $content = [];
        $value = '';

        foreach($dom->getElementsByTagName('h4') as $node) {
           $title = $dom->saveHTML($node);
           $content[$k]['key'] = $title;

           while(($node = $node->nextSibling) && $node->nodeName !== 'h4') {
              $value .= $dom->saveHTML($node);
           }

           $content[$k]['value'] = $value;
        }
        
        echo '<pre>';
        print_r($content);die;

暫無
暫無

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

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