PHP foreach循环不能正常工作 - 在半数组迭代后死掉

时间:2013-06-05 15:13:03

标签: php simplexml simple-html-dom

在这个脚本中,我正在加载一个包含80个项目的URL。在simple_html_dom的帮助下迭代每个项目'tr',共计80个。

但是foreach循环只迭代以下代码中的42个项目。

<?php
include_once "simple_html_dom.php";
$job_links=array();
$main_url = "http://xyz.com/rescnt=80";
$html = new simple_html_dom();
$html->load_file($main_url);
$fun = $html->find('div[class=dontent_wrap]',0)->find('table',0);
$i=0;
echo count($fun->find('tr'));
foreach($fun->find('tr') as $tr){
    echo ++$i;
    $td = $tr->find( 'td',1);
    $a =  $td->find('a',0);
    $link = $a->href;
    $id = $a->id;
        $id = trim(preg_replace('/link/','',$id)); 
     $my_link ="http://xyz.com/details/".$id.".html";
    if(strpos($link, $my_link)!==false){
        $job_links[] =trim($my_link);

    }
}
echo 'count:'.count($job_links);
print_r($job_links);
?>

从循环中删除几行后,迭代完成为81。

foreach($fun->find('tr') as $tr){
    echo ++$i;
    $td = $tr->find( 'td',1);
}

我不知道出了什么问题。这已经过去了。

这不是超时问题,因为我使用set_time_limit(0);无效。

如果项目“tr”的数量减少到40,则循环再次迭代到21同样的问题(它也告诉没有超时问题)

所有项目都相同,具有相同类型和相同数量的元素。

2 个答案:

答案 0 :(得分:0)

html中缺少一个td,似乎是这样:

 include("simple_html_dom.php");
$job_links=array();
$monster_main_url = "http://jobsearch.monsterindia.com/searchresult.html?day=1&res_cnt=80";
$html = new simple_html_dom();
$html->load_file($monster_main_url);
$fun = $html->find('div[class=dd_content_wrap]',0)->find('table',0);
$i=0;
echo count($fun->find('tr'));

foreach($fun->find('tr') as $tr){
    echo ++$i;


    $td = $tr->find( 'td',1);
    if($td!=NULL) {
    $a =  $td->find('a',0);


    $link = $a->href;
    $id = $a->id;
        $id = trim(preg_replace('/link/','',$id)); 
     $my_link ="http://jobs.monsterindia.com/details/".$id.".html";
    }

    else {

        $my_link="no link";

    }
    if(strpos($link, $my_link)!==false){
        $job_links[] =trim($my_link);

    }
}
echo '<br>count:'.count($job_links);
print_r($job_links);

答案 1 :(得分:0)

打开错误:

ini_set('display_errors', 1);
error_reporting(E_ALL & ~E_NOTICE);

将它放在文件的开头。