2015-12-04 293 views
0

我知道這個解決方案很簡單,但它一直在打滑我的思維。當我使用此代碼解析頁面並打印$links陣列時,所有href部分都正確,但img部分僅打印頁面上找到的最後一個src元素。嵌套的foreach循環

$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$links = array(); 
$images = $doc->getElementsByTagName("img"); 
$arr = $doc->getElementsByTagName("a"); 

    foreach($arr as $item) { 
     // get links 
     $href = $item->getAttribute("href"); 

     // get images. 
     foreach ($images as $item) { 
      $img = $item->getAttribute('src'); 
     }  

     $links[] = array(
      'href' => $href, 
      'img' => $img 
     ); 
    } 

print_r(array_values($links)); 
+1

這是因爲'$ img'得到與每個迭代一個新值代替但你只把'$ *循環結束後,將img'放入新數組*中。 –

+0

把這個第二foreach $ img []和使用$ img,我認爲它的工作 – RaMeSh

+0

這是什麼代碼試圖完成?在這種情況下嵌套'foreach'循環似乎很奇怪。 – Nate

回答

0

的用於圖像中的每個語句應當建立一個數組,其中作爲最終陣列($鏈接)是多維數組($ IMG作爲嵌套數組)。

0

您在內部使用dublicate變量$item

試試這個沒有內部的foreach

$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$links = array(); 
$images = $doc->getElementsByTagName("img"); 
$arr = $doc->getElementsByTagName("a"); 

    foreach($arr as $key=>$item) { 
     // get links 
     $href = $item->getAttribute("href"); 

     $img = $images[$key]->getAttribute('src'); 

     $links[] = array(
      'href' => $href, 
      'img' => $img 
     ); 
    }unset($item); 

print_r(array_values($links)); 
0

檢查,如果這對你的作品:

$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$links = array(); 
$images = $doc->getElementsByTagName("img"); 
$arr = $doc->getElementsByTagName("a"); 

foreach($arr as $item) { 
    // get links 
    $href = $item->getAttribute("href"); 

    // get images. 
    foreach ($images as $item) { 
     $img = $item->getAttribute('src'); 

     // storing the image src 
     $links[] = array(
      'img' => $img 
     ); 
    }  

    $links[] = array(
     'href' => $href 
    ); 
} 

print_r(array_values($links));