[英]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 非常復雜。
先感謝您。
這是結果:
$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.