
关于foreach循环执行一半的问题。代码如下,都有标注。请高手帮忙分析下。 50
<?phpclasswordskey{private$keyarr;//定义内部关键词数组private$words;//定义关键词private$num;//定义查询次...
<?php
class wordskey{
private $keyarr;//定义内部关键词数组
private $words; //定义关键词
private $num; //定义查询次数
public $wordsarr;//定义外部返回关键词数组
function __construct($wd,$num){
//初始化数据
$this->keyarr = array();
$this->words = $wd;
$this->num = $num;
if($this->num == 1){ //如果查询次数为1 则调用一次查询
$this->getwords($this->words);//初始化查询数组
}else{ //如果查询次数大于1 则调用循环查询
$this->getwords($this->words);//初始化查询数组
$this->setwords($this->num,0,0);//开始循环数组查询
}
$wordsarr=$this->keyarr; //将获取到的内部关键词数组赋值给外部返回关键词数组
return $wordsarr; //返回外部关键词数组
}
//获取截取关键词
function getwords($words=null){
$dom = new DOMDocument(); //调用dom类
echo '<font style="color:red;">'.$words.'</font><br/>';//输出关键词 可要可不要
$url='http://www.baidu.com/s?wd='.$words;
@$dom->loadHTMLFile($url);
$xml = simplexml_import_dom($dom);
$is = array();
// 截取关键词并赋值填充到数组
for($a=0; $a<=1;$a++){
$val= $xml->body[0]->div[0]->div[0]->div[0]->div[3]->table[0]->tr[$a];
//print_r($val);
for($b=0;$b<=5;$b++){
foreach((array)$val->th[$b] as $i){
$is[] = $i;
}
}
}
//将获取到的关键词数组筛选并赋值给 内部关键词数组
for($num=2;$num<=11;$num++){
$this->keyarr[]=$is[$num];
}
// var_dump($this->keyarr);
// echo "<hr/>";
return $this->keyarr;
}
//判断获取层级关键词
function setwords($getnum=0,$arrnum=0,$fornum=1){
$valarr = $this->keyarr;
$count = count($valarr)-$arrnum;
$val = array_slice($valarr,$arrnum,$count); //截取需要循环关键词数组
$counum = count($val);//统计需要循环的关键词数组条数
// echo "<hr/>";
// var_dump($val);
// echo "<hr/>";
if($getnum>=$fornum){ //从调用数组开始进行循环查询
//出问题的循环
foreach($val as $i){
echo "$counum<br/>"; //第二次调用应该循环输出 10-109.结果只循环40多就结束了。
$this->getwords($i);//循环查询
}
// echo "<hr/>";
// echo "是否运行到此处";
// echo "<hr/>";
$arrnum=($arrnum+1)*10;
$fornum+=1;
$this->setwords($getnum,$arrnum,$fornum);//重载函数,以便进行后续多层查询
}else{
return $this->keyarr;
}
}
}
?> 展开
class wordskey{
private $keyarr;//定义内部关键词数组
private $words; //定义关键词
private $num; //定义查询次数
public $wordsarr;//定义外部返回关键词数组
function __construct($wd,$num){
//初始化数据
$this->keyarr = array();
$this->words = $wd;
$this->num = $num;
if($this->num == 1){ //如果查询次数为1 则调用一次查询
$this->getwords($this->words);//初始化查询数组
}else{ //如果查询次数大于1 则调用循环查询
$this->getwords($this->words);//初始化查询数组
$this->setwords($this->num,0,0);//开始循环数组查询
}
$wordsarr=$this->keyarr; //将获取到的内部关键词数组赋值给外部返回关键词数组
return $wordsarr; //返回外部关键词数组
}
//获取截取关键词
function getwords($words=null){
$dom = new DOMDocument(); //调用dom类
echo '<font style="color:red;">'.$words.'</font><br/>';//输出关键词 可要可不要
$url='http://www.baidu.com/s?wd='.$words;
@$dom->loadHTMLFile($url);
$xml = simplexml_import_dom($dom);
$is = array();
// 截取关键词并赋值填充到数组
for($a=0; $a<=1;$a++){
$val= $xml->body[0]->div[0]->div[0]->div[0]->div[3]->table[0]->tr[$a];
//print_r($val);
for($b=0;$b<=5;$b++){
foreach((array)$val->th[$b] as $i){
$is[] = $i;
}
}
}
//将获取到的关键词数组筛选并赋值给 内部关键词数组
for($num=2;$num<=11;$num++){
$this->keyarr[]=$is[$num];
}
// var_dump($this->keyarr);
// echo "<hr/>";
return $this->keyarr;
}
//判断获取层级关键词
function setwords($getnum=0,$arrnum=0,$fornum=1){
$valarr = $this->keyarr;
$count = count($valarr)-$arrnum;
$val = array_slice($valarr,$arrnum,$count); //截取需要循环关键词数组
$counum = count($val);//统计需要循环的关键词数组条数
// echo "<hr/>";
// var_dump($val);
// echo "<hr/>";
if($getnum>=$fornum){ //从调用数组开始进行循环查询
//出问题的循环
foreach($val as $i){
echo "$counum<br/>"; //第二次调用应该循环输出 10-109.结果只循环40多就结束了。
$this->getwords($i);//循环查询
}
// echo "<hr/>";
// echo "是否运行到此处";
// echo "<hr/>";
$arrnum=($arrnum+1)*10;
$fornum+=1;
$this->setwords($getnum,$arrnum,$fornum);//重载函数,以便进行后续多层查询
}else{
return $this->keyarr;
}
}
}
?> 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询