从递归函数php获取数据
我有一个递归函数,但它只返回初始数据:从递归函数php获取数据,php,recursion,Php,Recursion,我有一个递归函数,但它只返回初始数据: $urls[] = 'http://site1.com'; $urls[] = 'http://site2.com'; foreach($urls as $url) { $output = getMainPage($url, $zids, $listing_count, array(), array()); } print_r($output); //Line 1 function getMainPage($url, $zids, $listing_
$urls[] = 'http://site1.com';
$urls[] = 'http://site2.com';
foreach($urls as $url) {
$output = getMainPage($url, $zids, $listing_count, array(), array());
}
print_r($output); //Line 1
function getMainPage($url, $zids, $listing_count, $ids = array(), $names = array()) {
$dom = new DOMDocument;
@$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');
$output_html = '';
foreach ($links as $link){
print_r($ids); //Line 2
$ids[] = $this_id;
$names[] = $this_name;
$listing_count++;
if(strpos($href, 'next') !== FALSE) {
$url = $next_url;
$o = getMainPage($url, $zids, $listing_count, $ids, $names);
}
}
$output['ids'] = $ids;
$output['names'] = $names;
return $output;
}
打印(输出)//第1行仅从foreach$link循环输出初始数据集,但是打印($id)//第2行输出增量ID。因此,输出当然是在循环完成之前返回的
编辑:新代码(除最后一组数据外,结果相同)
您可以尝试以下方法:
$urls[] = 'http://site1.com';
$urls[] = 'http://site2.com';
foreach ($urls as $url) {
$output = getMainPage($url, $zids, $listing_count, array(), array());
}
print_r($output); //Line 1
function getMainPage($url, $zids, $listing_count, $ids = array(), $names = array(), $o = array()) {
$dom = new DOMDocument;
@$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');
$output_html = '';
foreach ($links as $link) {
print_r($ids); //Line 2
$output['ids'][] = $this_id;
$output['$names'][] = $this_name;
$listing_count++;
$output['listing_count'] = $listing_count;
$o[] = $output;
if (strpos($href, 'next') !== FALSE) {
$url = $next_url;
$o = getMainPage($url, $output['zids'], $output['listing_count'], $output['ids'], $output['names'], $o);
}
}
return $o;
}
我终于成功了:
$urls[] = 'http://site1.com';
$urls[] = 'http://site2.com';
foreach($urls as $url) {
$output = getMainPage($url, $zids, $listing_count, array(), array());
}
print_r($output); //Line 1
function getMainPage($url, $zids, $listing_count, $ids = array(), $names = array()) {
$dom = new DOMDocument;
@$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');
$output_html = '';
foreach ($links as $link){
print_r($ids); //Line 2
$output['ids'][] = $this_id;
$output['$names'][] = $this_name;
$listing_count++;
$output['listing_count'] = $listing_count;
if(strpos($href, 'next') !== FALSE) {
$url = $next_url;
$o = getMainPage($url, $output['zids'], $output['listing_count'], $output['ids'], $output['names']);
$output['ids'] = array_merge($output['ids'], $o['ids']);
$output['names'] = array_merge($output['names'], $o['names']);
}
}
return $output;
}
$o=getMainPage($url、$zids、$listing\U count、$ids、$NAME)
这个$o
从未在其他地方使用过。@BagusTesa我重新编写了它,考虑了你提到的内容,结果仍然相同。请参阅已编辑的代码。这返回到仅返回初始数据集
$urls[] = 'http://site1.com';
$urls[] = 'http://site2.com';
foreach($urls as $url) {
$output = getMainPage($url, $zids, $listing_count, array(), array());
}
print_r($output); //Line 1
function getMainPage($url, $zids, $listing_count, $ids = array(), $names = array()) {
$dom = new DOMDocument;
@$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');
$output_html = '';
foreach ($links as $link){
print_r($ids); //Line 2
$output['ids'][] = $this_id;
$output['$names'][] = $this_name;
$listing_count++;
$output['listing_count'] = $listing_count;
if(strpos($href, 'next') !== FALSE) {
$url = $next_url;
$o = getMainPage($url, $output['zids'], $output['listing_count'], $output['ids'], $output['names']);
$output['ids'] = array_merge($output['ids'], $o['ids']);
$output['names'] = array_merge($output['names'], $o['names']);
}
}
return $output;