2016-05-19 32 views
0

我有一個HTML部分通過簡單的domparser檢索。重複多個類值得到DIV

這是我的HTML代碼。

<div class="descriptio"> 
    <div class="sptr"><h4>Directors</h4><a href="">Jhon 1</a>, <a href="">Jhon 2</a>, <a href="">Jhon 3</a></div> 
    <div class="sptr"><h4>Writers</h4><a href="">Doe 1</a>, <a href="">Doe 2</a>, <a href="">Doe 3</a></div> 
    <div class="sptr"><h4>Stars</h4><a href="">Ann 1</a>, <a href="">Ann 2</a>, <a href="">Ann 3</a></div> 
</div> 

我想在「sptr」類中獲得不同的「descriptio」類值。 我正是想要檢索。

董事:JHON 1,JHON 2,JHON 3

編劇:Doe的1,能源部2,伊3

星級:安1,安2,安3

我試圖與此代碼,但這是錯誤的

<?PHP 
    $directors = ''; 
    foreach ($html_page_url->find('div.description div.sptr') as $val) 
    { 
     $directors.= $val.','; 
    } 
?> 

我該如何解決這個問題?

+0

創建數組並使用implode – C2486

+0

,但它會出現所有值的每一行,我想插入導演值到數據庫中的1列,如作家和星星到不同列 –

回答

0

使用DOM文檔和DomXPath:

<?php 


$html = '<div class="descriptio"> 
    <div class="sptr"><h4>Directors</h4><a href="">Jhon 1</a>, <a href="">Jhon 2</a>, <a href="">Jhon 3</a></div> 
    <div class="sptr"><h4>Writers</h4><a href="">Doe 1</a>, <a href="">Doe 2</a>, <a href="">Doe 3</a></div> 
    <div class="sptr"><h4>Stars</h4><a href="">Ann 1</a>, <a href="">Ann 2</a>, <a href="">Ann 3</a></div> 
</div>'; 

$doc = new DOMDocument(); 
$doc->loadXML($html); 
$finder = new DomXPath($doc); 
$classname="descriptio"; 
$divDescriptio = $finder->query("//*[contains(@class, '$classname')]"); 

$i = 0; 
$row = []; 

foreach ($divDescriptio[0]->getElementsByTagName('div') as $element) 
{ 
    $row[$i]['title'] = $element->getElementsByTagName('h4')[0]->nodeValue; 
    $names = $element->getElementsByTagName('a'); 

    foreach($names as $name) 
    { 
     $row[$i][] = $name->nodeValue; 
    } 

    $i++; 
} 


var_dump($row); 
?> 

輸出:

array(3) { 
    [0]=> 
    array(4) { 
    ["title"]=> 
    string(9) "Directors" 
    [0]=> 
    string(6) "Jhon 1" 
    [1]=> 
    string(6) "Jhon 2" 
    [2]=> 
    string(6) "Jhon 3" 
    } 
    [1]=> 
    array(4) { 
    ["title"]=> 
    string(7) "Writers" 
    [0]=> 
    string(5) "Doe 1" 
    [1]=> 
    string(5) "Doe 2" 
    [2]=> 
    string(5) "Doe 3" 
    } 
    [2]=> 
    array(4) { 
    ["title"]=> 
    string(5) "Stars" 
    [0]=> 
    string(5) "Ann 1" 
    [1]=> 
    string(5) "Ann 2" 
    [2]=> 
    string(5) "Ann 3" 
    } 
} 
+0

謝謝!我會試試這個。 –

+0

完美工作 –

+0

如果它可以幫助你,你可以標記爲答案/ upvote來幫助其他人。 –

0

如果你想保持他們在3個不同的變量,你可以這樣做:

$html = <<<HTML 
<div class="descriptio"> 
    <div class="sptr"><h4>Directors</h4><a href="">Jhon 1</a>, <a href="">Jhon 2</a>, <a href="">Jhon 3</a></div> 
    <div class="sptr"><h4>Writers</h4><a href="">Doe 1</a>, <a href="">Doe 2</a>, <a href="">Doe 3</a></div> 
    <div class="sptr"><h4>Stars</h4><a href="">Ann 1</a>, <a href="">Ann 2</a>, <a href="">Ann 3</a></div> 
</div> 
HTML; 

$doc = new DOMDocument(); 
$doc->loadHTML($html); 

// Retrieve each category 
$headers = $doc->getElementsByTagName('h4'); 

foreach ($headers as $header) { 
    // This will hold the name of each variable 
    $category = strtolower($header->nodeValue); 

    // This will become $directors, $writers or $stars 
    $$category = "{$header->nodeValue}: "; 

    // Retrieve the links of each category 
    $links = $header->parentNode->getElementsByTagName('a'); 

    $temp = array(); 
    foreach ($links as $link) { 
     $temp[] = $link->nodeValue; 
    } 

    $$category .= implode(',', $temp); 
} 

echo "{$directors}\n{$writers}\n{$stars}"; 

輸出:

Directors: Jhon 1,Jhon 2,Jhon 3 
Writers: Doe 1,Doe 2,Doe 3 
Stars: Ann 1,Ann 2,Ann 3 
+0

太棒了!完美的作品! –