我正在使用simple_html_dom_helper,所以做一些屏幕抓取并遇到一些错误。
第二个foreach运行4次(自sizeof($pages) == 4
起),而它应该只运行一次。我从示例脚本中获取了此代码,其中table.result-liste
在页面上多次出现。在我的情况下它只发生一次,所以imho没有必要foreach。 print_r($data)
打印出相同的内容4次,并且没有必要。
进一步下来我试图在没有foreach的情况下做同样的事情,但它只打印出no
,所以似乎有不同的反应,我不知道为什么。
foreach( $pages as $page )
{
$p = $this->create_url($codes[0], $price, $page); //pass page number along
$p_html = file_get_html($p);
$row = $p_html->find("table[class=result-liste] tr");
//RUNS OK BUT NO NEED TO DO IT FOUR TIMES.
//CLASS RESULT-LISTE ONLY OCCURS ONCE ANYWAY
foreach( $p_html->find("table[class=result-liste] tr") as $row)
{
//grab only rows where there is a link
if( $row->find('td a') )
{
$d_price = $this->get_price($row->first_child());
$d_propid = $this->get_prop_id($row->outertext);
$data = array(
"price" => $d_price,
"prop_id" => $d_propid
);
print_r($data);
}
}
//MY ATTEMPT TO AVOID THE SECOND FOREACH DOES NOT WORK ...
$row = $p_html->find("table[class=result-liste] tr");
if( is_object($row) && $row->find('td a')) print "yes ";
else print "no ";
}
答案 0 :(得分:2)
即使table[class=result-liste]
仅在页面上出现一次,此find语句也会查找作为表行的<tr>
元素。因此,除非您的表只有一行,否则您需要foreach
。
$p_html->find("table[class=result-liste] tr")
答案 1 :(得分:0)
您的代码
foreach( $p_html->find("table[class=result-liste] tr") as $row)
{
//grab only rows where there is a link
if( $row->find('td a') )
{
$d_price = $this->get_price($row->first_child());
$d_propid = $this->get_prop_id($row->outertext);
$data = array(
"price" => $d_price,
"prop_id" => $d_propid
);
print_r($data);
}
}
将以上代码替换为MY代码
$asRow = $p_html->find("table[class=result-liste] tr");
$row = $asRow[0];
//grab only rows where there is a link
if( $row->find('td a') )
{
$d_price = $this->get_price($row->first_child());
$d_propid = $this->get_prop_id($row->outertext);
$data = array(
"price" => $d_price,
"prop_id" => $d_propid
);
print_r($data);
}
试试这个。