Problem:
Sie besitzen HTML-Inhalt mit Elementen, die sowohl Überschriften als auch enthalten normaler Text. Ihr Ziel besteht darin, den Text aus Elementen mit einer bestimmten Klasse („Heading1-H“ für Überschriften, „Normal-H“ für Text) in zwei separate Arrays zu extrahieren: $heading und $content.
Lösung:
Verwendung von PHP DOM und XPath
PHP DOM (Document Object Model) und XPath (XML Path Language) bieten eine robuste Lösung für diese Aufgabe. Hier ist die Implementierung:
$test = <<<HTML <p class="Heading1-P"> <span class="Heading1-H">Chapter 1</span> </p> <p class="Normal-P"> <span class="Normal-H">This is chapter 1</span> </p> <p class="Heading1-P"> <span class="Heading1-H">Chapter 2</span> </p> <p class="Normal-P"> <span class="Normal-H">This is chapter 2</span> </p> <p class="Heading1-P"> <span class="Heading1-H">Chapter 3</span> </p> <p class="Normal-P"> <span class="Normal-H">This is chapter 3</span> </p> HTML; $dom = new DOMDocument(); $dom->loadHTML($test); $xpath = new DOMXPath($dom); $heading = parseToArray($xpath, 'Heading1-H'); $content = parseToArray($xpath, 'Normal-H'); var_dump($heading); echo "<br/>"; var_dump($content); echo "<br/>"; function parseToArray(DOMXPath $xpath, string $class): array { $xpathquery = "//*[@class='$class']"; $elements = $xpath->query($xpathquery); $resultarray = []; foreach ($elements as $element) { $nodes = $element->childNodes; foreach ($nodes as $node) { $resultarray[] = $node->nodeValue; } } return $resultarray; }
Ausgabe:
array(3) { [0] => string(8) "Chapter 1" [1] => string(8) "Chapter 2" [2] => string(8) "Chapter 3" } <br/> array(3) { [0] => string(15) "This is chapter 1" [1] => string(15) "This is chapter 2" [2] => string(15) "This is chapter 3" } <br/>
Das obige ist der detaillierte Inhalt vonWie kann ich mit PHP Text aus bestimmten HTML-Elementen mit unterschiedlichen Klassen in separate Arrays extrahieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!