簡體   English   中英

從php中的<div>標簽的內容創建數組

[英]Create array from the contents of <div> tags in php

我有一個分配給變量$html的網頁的內容

這是$html內容的一個例子:

<div class="content">something here</div>
<span>something random thrown in <strong>here</strong></span>
<div class="content">more stuff</div>

如何,使用PHP,我可以創建一個數組,從中找到像這樣的<div class="content"></div>區域的<div class="content"></div> (對於上面的例子),所以:

echo $array[0] . "\n" . $array[1]; //etc

輸出

something here
more stuff

假設這只是OP中的一個簡化案例,而且實際情況更復雜,那么您將需要使用XPath。

如果它真的很復雜,那么你可能想要使用DOMDocument (使用DOMXPath ),但這是一個使用SimpleXML的簡單示例

$xml = new SimpleXMLElement($html);

$result = $xml->xpath('//div[@class="content"]');

while(list( , $node) = each($result)) {
    echo $node,"\n";
}

由於您明確詢問了為此創建數組,您可以使用:

$res_Arr = array();
while(list( , $node) = each($result)) {
    $res_Arr[] = $node;
}

$res_Arr將是一個包含您正在尋找的內容的數組。

有關php SimpleXML Xpath信息,請參見http://php.net/manual/en/simplexmlelement.xpath.php ;有關XPath規范,請參閱http://www.w3.org/TR/xpath

PHP有幾種處理HTML的方法,包括DomDocumentSimpleXML 請參閱使用PHP和DOM解析HTML 這是一個例子:

$dom = new DomDocument; 
$dom->loadHTML($html); 
$dom->preserveWhiteSpace = false; 
$divs = $dom->getElementsByTagName('div'); 
foreach ($divs as $div) {
  $class = $div->getAttribute('class');
  if ($class == 'content') {
    echo $div->nodeValue . "\n";
  }
}

從技術上講,class屬性可以是多個類,因此您可能希望使用:

$classes = explode(' ', $class);
if (in_array('content', $classes)) {
  ...
}

SimpleXML / XPath方法更簡潔,但如果您不想使用XPath路徑(並且學習另一種技術,至少足以完成這些類型的任務),那么上面是一種程序化的替代方案。

你可能需要使用preg_match_all ()

$matches = array();
preg_match_all('`\<div(.*?)class\=\"content\"(.*?)\>(.*?)\<\/div\>`iUsm',$html,$matches,PREG_SET_ORDER);
foreach($matches as $m){
  // $m[3] represents the content in <div class="content">
}

沒有太多你可以做不到使用字符串操作函數或正則表達式。 您可以使用DOM庫將HTML作為XML加載並使用它遍歷您的div,但如果您不小心或結構復雜,這可能會變得很麻煩。

http://ca3.php.net/manual/en/book.dom.php

看起來Kalem13打敗了我,但我同意。 您可以使用DOMDocument類。 我沒有親自使用它,但我認為這對你有用。 首先,實例化DOMDocument對象,然后使用loadHTML()函數加載$ html變量。 然后你可以使用getElementsByTagName()函數。

暫無
暫無

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

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