2011-01-05 49 views
1

我試圖用PhpQuery解析一些HTML,但它對我來說並不容易...如何通過PhpQuery使用Foreach?

我只需要提取URL(href標籤)到一個數組,但它不工作。

請參閱只是爲了舉例驗證碼:

$doc = phpQuery::newDocumentHTML('<div align = "left" style="background-color:#FFFFFF;border:1px solid #C3D9FF"> </p> 

     <table cellPadding="2" cellSpacing="0" width="100%" height="60" style="border-collapse: collapse; "> 

      <tr> 
      <td align="left" width="531" height="20"><small> 
      <strong> 

      <a href="/1153414/"> 

      <font style="FONT-SIZE: 13px; LINE-HEIGHT: 14px">Industrial</font><a/> </a></small></strong> 
      </td> 

      </tr> 
      <tr> 
      <td align="left" vAlign="top" width="100%" height="1"> 
      <table align="left" border="0" cellPadding="0" cellSpacing="0" width="736"> 
       <tr> 
       <td align="left" vAlign="top" width="67"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px"> 
       Data:</font></strong></td> 

       <td align="left" vAlign="top" width="150"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;4-1-2011 </font></td> 
       <td align="left" vAlign="top" width="59"> 
       <font color="#000000" face="Arial" size="2"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Zona:</font></strong></td> 
       <td align="left" vAlign="top" width="473"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp; Castelo Branco</font></td> 

       </tr> 
       <tr> 
       <td align="left" vAlign="top" width="67"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Categoria:</font></strong></td> 
       <td align="left" vAlign="top" width="150"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;Indústria/Produção </font></td> 
       <td align="left" vAlign="top" width="59"> 

       <font color="#000000" face="Arial" size="2"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Empresa:</font></strong></td> 
       <td align="left" vAlign="top" width="473"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;Isotransfo, Unipessoal LDA</font></td> 
       </tr> 
       </table> 
      </td> 

      </tr> 
     </table> 

</p> 

     <table cellPadding="2" cellSpacing="0" width="100%" height="60" style="border-collapse: collapse; "> 
      <tr> 
      <td align="left" width="531" height="20"><small> 
      <strong> 

      <a href="/1153399/"> 

      <font style="FONT-SIZE: 13px; LINE-HEIGHT: 14px">Admite-se<a/> </a> </font></small></strong> 
      </td> 
      </tr> 
      <tr> 
      <td align="left" vAlign="top" width="100%" height="1"> 
      <table align="left" border="0" cellPadding="0" cellSpacing="0" width="736"> 

       <tr> 
       <td align="left" vAlign="top" width="67"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px"> 
       Data:</font></strong></td> 
       <td align="left" vAlign="top" width="150"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;4-1-2011 </font></td> 
       <td align="left" vAlign="top" width="59"> 

       <font color="#000000" face="Arial" size="2"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Zona:</font></strong></td> 
       <td align="left" vAlign="top" width="473"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp; Castelo Branco</font></td> 
       </tr> 
       <tr> 

       <td align="left" vAlign="top" width="67"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Categoria:</font></strong></td> 
       <td align="left" vAlign="top" width="150"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;Indústria/Produção </font></td> 
       <td align="left" vAlign="top" width="59"> 
       <font color="#000000" face="Arial" size="2"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 

       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Empresa:</font></strong></td> 
       <td align="left" vAlign="top" width="473"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;Isotransfo, Unipessoal LDA</font></td> 
       </tr> 
       </table> 
      </td> 
      </tr> 
     </table> 

</p> 

     <table cellPadding="2" cellSpacing="0" width="100%" height="60" style="border-collapse: collapse; "> 
      <tr> 
      <td align="left" width="531" height="20"><small><font face="Arial"> 
      <strong> 

      <a href="/1153280/"> 

      <font style="FONT-SIZE: 13px; LINE-HEIGHT: 14px">Precisa-se</font><a/> </a> </font></small></strong> 

      </td> 
      </tr> 
      <tr> 
      <td align="left" vAlign="top" width="100%" height="1"> 
      <table align="left" border="0" cellPadding="0" cellSpacing="0" width="736"> 
       <tr> 
       <td align="left" vAlign="top" width="67"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px"> 

       Data:</font></strong></td> 
       <td align="left" vAlign="top" width="150"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;4-1-2011 </font></td> 
       <td align="left" vAlign="top" width="59"> 
       <font color="#000000" face="Arial" size="2"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Zona:</font></strong></td> 

       <td align="left" vAlign="top" width="473"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp; (Todas as Zonas)</font></td> 
       </tr> 
       <tr> 
       <td align="left" vAlign="top" width="67"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Categoria:</font></strong></td> 

       <td align="left" vAlign="top" width="150"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;Saúde/Medicina/Enfermagem </font></td> 
       <td align="left" vAlign="top" width="59"> 
       <font color="#000000" face="Arial" size="2"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Empresa:</font></strong></td> 
       <td align="left" vAlign="top" width="473"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;Emprego Radiologia</font></td> 

       </tr> 
       </table> 
      </td> 
      </tr> 
     </table> 

</p> 

     <table cellPadding="2" cellSpacing="0" width="100%" height="60" style="border-collapse: collapse; "> 
      <tr> 

      <td align="left" width="531" height="20"><small><font face="Arial"> 
      <strong> 

      <a href="/1152665/"> 

      <font style="FONT-SIZE: 13px; LINE-HEIGHT: 14px">Operadores</font><a/> </a> </font></small></strong> 
      </td> 
      </tr> 

      <tr> 
      <td align="left" vAlign="top" width="100%" height="1"> 
      <table align="left" border="0" cellPadding="0" cellSpacing="0" width="736"> 
       <tr> 
       <td align="left" vAlign="top" width="67"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px"> 
       Data:</font></strong></td> 

       <td align="left" vAlign="top" width="150"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;4-1-2011 </font></td> 
       <td align="left" vAlign="top" width="59"> 
       <font color="#000000" face="Arial" size="2"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Zona:</font></strong></td> 
       <td align="left" vAlign="top" width="473"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp; Viseu</font></td> 

       </tr> 
       <tr> 
       <td align="left" vAlign="top" width="67"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Categoria:</font></strong></td> 
       <td align="left" vAlign="top" width="150"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;Lojas/Comércio/Balcão </font></td> 
       <td align="left" vAlign="top" width="59"> 

       <font color="#000000" face="Arial" size="2"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Empresa:</font></strong></td> 
       <td align="left" vAlign="top" width="473"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;Dia Portugal Supermercados - Soc. Unip., Lda.</font></td> 
       </tr> 
       </table> 
      </td> 

      </tr> 
     </table> 

</p> 

     <table cellPadding="2" cellSpacing="0" width="100%" height="60" style="border-collapse: collapse; "> 
      <tr> 
      <td align="left" width="531" height="20"><small><font face="Arial"> 
      <strong> 

      <a href="/1153524/"> 

      <font style="FONT-SIZE: 13px; LINE-HEIGHT: 14px">Responsável</font><a/> </a> </font></small></strong> 
      </td> 
      </tr> 
      <tr> 
      <td align="left" vAlign="top" width="100%" height="1"> 
      <table align="left" border="0" cellPadding="0" cellSpacing="0" width="736"> 

       <tr> 
       <td align="left" vAlign="top" width="67"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px"> 
       Data:</font></strong></td> 
       <td align="left" vAlign="top" width="150"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;4-1-2011 </font></td> 
       <td align="left" vAlign="top" width="59"> 

       <font color="#000000" face="Arial" size="2"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Zona:</font></strong></td> 
       <td align="left" vAlign="top" width="473"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp; Santarem</font></td> 
       </tr> 
       <tr> 

       <td align="left" vAlign="top" width="67"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 
       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Categoria:</font></strong></td> 
       <td align="left" vAlign="top" width="150"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;Comercial/Vendas </font></td> 
       <td align="left" vAlign="top" width="59"> 
       <font color="#000000" face="Arial" size="2"> 
       <strong style="FONT-SIZE: 11px; LINE-HEIGHT: 14px; font-weight:400"> 

       <font face="Arial" color="#333333" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">Empresa:</font></strong></td> 
       <td align="left" vAlign="top" width="473"> 
       <font face="Arial" style="FONT-SIZE: 11px; LINE-HEIGHT: 14px">&nbsp;ALDI Supermercados Lda.</font></td> 
       </tr> 
       </table> 
      </td> 
      </tr> 
     </table> 
</div>'); 
//echo $doc['div table a']->attr('href'); 
foreach ($doc['div table a'] as $a) { 
    $hrefs[] .= pq($a)->attr('href'); 
} 
print_r ($hrefs); 

如果我回聲出碼波紋管得到它是我唯一href網址,並且它是確定:

echo $doc['div table a']->attr('href'); 

如果我運行foreach語句我得到了一個空值的數組:

foreach ($doc['div table a'] as $a) { 
    $hrefs[] .= pq($a)->attr('href'); 
} 
print_r ($hrefs); 

我得到的數組是:

Array ( 
    [0] => /1153414/ 
    [1] => 
    [2] => /1153399/ 
    [3] => 
    [4] => /1153280/ 
    [5] => 
    [6] => /1152665/ 
    [7] => 
    [8] => /1153524/ 
    [9] => 
    ) 

怎樣才能像這樣的數組:

Array ( 
    [0] => /1153414/ 
    [1] => /1153399/ 
    [2] => /1153280/ 
    [3] => /1152665/ 
    [4] => /1153524/ 
    ) 

如果你可以給我一些線索,我將不勝感激。

對不起我的英文不好

最好的問候,

回答

3

你的<a/>五個實例在你的代碼。這會創建一個空的a元素,而不是關閉現有元素。刪除它們,你的代碼應該可以正常工作。


編輯從數組中除去空值的非常簡單的方式運行array_filter與沒有第二個參數:

$hrefs = array_filter($hrefs); 
+0

如何!我懂了。 HTML不是我的,來自我需要取消的網站。謝謝您的幫助。 – 2011-01-05 10:19:07

1
if (pq($a)->attr('href') != '') { 
    $hrefs[] .= pq($a)->attr('href'); 
} 
+0

感謝您的答覆。有用!你知道爲什麼當我在foreach上指定「attr('href')」嗎? – 2011-01-05 10:15:56

+0

@問題是什麼,你的解決方案解決了問題「array_filter($ hrefs)」以無聲方式完成工作。 – 2011-01-05 10:55:04

+0

@Andre,寂寞天更快解釋:) – 2011-01-06 10:39:58