Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 组合2个单独的foreach循环_Php_Loops_Foreach_Scrape - Fatal编程技术网

Php 组合2个单独的foreach循环

Php 组合2个单独的foreach循环,php,loops,foreach,scrape,Php,Loops,Foreach,Scrape,到目前为止,我已经成功地从外部网站上抓取了2个元素到我的测试页面: (请在页面上进行测试搜索以查看结果) 我有两个foreach循环: foreach ($pnames as $pname) { $result1 = $document->saveHTML($pname); } foreach ($addresses as $address) { $result2 = $document->saveHTML($address); } $result1=全科医生执业机构的名称

到目前为止,我已经成功地从外部网站上抓取了2个元素到我的测试页面:

(请在页面上进行测试搜索以查看结果)

我有两个foreach循环:

foreach ($pnames as $pname) {
$result1 = $document->saveHTML($pname);
}


foreach ($addresses as $address) {
$result2 = $document->saveHTML($address);
}
$result1=全科医生执业机构的名称 $result2=全科医生诊所地址

正如你在测试页面上看到的,我的结果1和2是分开的。我如何获得它们,这样我就有了机构名称和机构地址

更新(@Tri)

for($i=0;$isaveHTML($pnames[$i]);
$name=str_替换('


我正在尝试刮取的数据图像

所以不要使用foreach:

for($i = 0; $i < count($pnames); $i++){
    $name= $document->saveHTML($pnames[$i]);
   $address = $document->saveHTML($addresses[$i]);
   //do something with your result
}
for($i=0;$isaveHTML($pnames[$i]);
$address=$document->saveHTML($addresses[$i]);
//对你的结果做点什么
}

注意:您必须确保您的第一个代码的地址长度等于pnames,您只需要将您的名称和地址存储在二维数组中,然后在数组中循环

这部分代码与您的代码完全相同:

$ch = curl_init('http://www.nhs.uk/service-search/GP/m410ux/Results/4/-2.35167407989502/53.4519462585449/4/0?distance=25');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
$output = curl_exec($ch);
curl_close($ch);

$document = new DOMDocument;
libxml_use_internal_errors(true);
$document->loadHTML($output);
$document->encoding = 'utf-8';
$xpath = new DOMXPath($document);
$pnames = $xpath->query("//th[@class='fctitle']");
$addresses = $xpath->query("//td[@class='fcdetails fc-first']");
现在我们将创建一个数组:

$results = array();
然后使用循环并将名称和地址成对存储在数组的相同索引中:

$iCnt = 0;
foreach ($pnames as $pname){
    $results[$iCnt]['name'] = $document->saveHTML($pname);
    $iCnt++;
}

$iCnt = 0;
foreach ($addresses as $address){
    $results[$iCnt]['address'] = $document->saveHTML($address);
    $iCnt++;
}
现在我们有了一个包含成对名称和地址的数组,如果我们在其中循环,我们可以一起看到它们:

for($iCnt = 0, $cnt = count($results); $iCnt < $cnt; $iCnt++){
    echo 'Name: '.$results[$iCnt]['name'].'<br>';
    echo 'Address: '.$results[$iCnt]['address'].'<br>';
}
for($iCnt=0,$cnt=count($results);$iCnt<$cnt;$iCnt++){
回显“名称:”。$results[$iCnt]['Name'].
; 回显“地址:”.$results[$iCnt]['Address']。
; }
仅此而已。完整的代码如下所示:

<?php
$ch = curl_init('http://www.nhs.uk/service-search/GP/m410ux/Results/4/-2.35167407989502/53.4519462585449/4/0?distance=25');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
$output = curl_exec($ch);
curl_close($ch);

$document = new DOMDocument;
libxml_use_internal_errors(true);
$document->loadHTML($output);
$document->encoding = 'utf-8';
$xpath = new DOMXPath($document);
$pnames = $xpath->query("//th[@class='fctitle']");
$addresses = $xpath->query("//td[@class='fcdetails fc-first']");

$results = array();

$iCnt = 0;
foreach ($pnames as $pname){
    $results[$iCnt]['name'] = $document->saveHTML($pname);
    $iCnt++;
}

$iCnt = 0;
foreach ($addresses as $address){
    $results[$iCnt]['address'] = $document->saveHTML($address);
    $iCnt++;
}

for($iCnt = 0, $cnt = count($results); $iCnt < $cnt; $iCnt++){
    echo 'Name: '.$results[$iCnt]['name'].'<br>';
    echo 'Address: '.$results[$iCnt]['address'].'<br>';
}
?>
loadHTML($output);
$document->encoding='utf-8';
$xpath=newdomxpath($document);
$pnames=$xpath->query(//th[@class='fctitle']);
$addresses=$xpath->query(//td[@class='fcdetails fc first']);
$results=array();
$iCnt=0;
foreach($pname作为$pname){
$results[$iCnt]['name']=$document->saveHTML($pname);
$iCnt++;
}
$iCnt=0;
foreach($地址作为$地址){
$results[$iCnt]['address']=$document->saveHTML($address);
$iCnt++;
}
对于($iCnt=0,$cnt=count($results);$iCnt<$cnt;$iCnt++){
回显“名称:”。$results[$iCnt]['Name'].
; 回显“地址:”.$results[$iCnt]['Address']。
; } ?>
你说$result1和$result2在一起是什么意思?你到底想如何合并它们?从我看来,你的
foreach
s是无用的,因为你正在覆盖
$result1
$result2
变量中的值,并且在每个循环的末尾,你只有最后一个元素的值se variables链接在我的末尾是一个404。你应该在问题中包括一个输入数据的小样本。@EhsanT-当我一起说时,我的意思是它显示GP机构名称(result1),然后在下一行显示GP机构地址(result2)然后循环继续到下一个。@Nisse Engström我将很快添加一个测试页,向您展示它目前显示的内容。我用一个测试页更新了我的问题,以便您可以看到我迄今为止所做的工作。它起到了作用,但是!它只显示一个结果,而不是所有实践。对于($I=0;$IsaveHTML($pnames[$i]);$name=str_replace('',$name);$address=$document->saveHTML($addresses[$i]);echo$name.
'.$address;}@你能调试你的代码并显示$pnames和$addresses的值吗?我用两个简单的数组测试了我的代码,它成功了。这是我的完整代码:我不能运行你的代码,所以我不能对你的代码做任何事。你需要调试并给我两个数组$pnames和$addresses的值。因为我不善于解释,我想我会给你一个im年龄告诉你我正在抓取什么数据并想要输出:哇…你真漂亮!非常感谢你花时间帮助我-这很好!我非常感谢你!:)欢迎你
for($iCnt = 0, $cnt = count($results); $iCnt < $cnt; $iCnt++){
    echo 'Name: '.$results[$iCnt]['name'].'<br>';
    echo 'Address: '.$results[$iCnt]['address'].'<br>';
}
<?php
$ch = curl_init('http://www.nhs.uk/service-search/GP/m410ux/Results/4/-2.35167407989502/53.4519462585449/4/0?distance=25');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
$output = curl_exec($ch);
curl_close($ch);

$document = new DOMDocument;
libxml_use_internal_errors(true);
$document->loadHTML($output);
$document->encoding = 'utf-8';
$xpath = new DOMXPath($document);
$pnames = $xpath->query("//th[@class='fctitle']");
$addresses = $xpath->query("//td[@class='fcdetails fc-first']");

$results = array();

$iCnt = 0;
foreach ($pnames as $pname){
    $results[$iCnt]['name'] = $document->saveHTML($pname);
    $iCnt++;
}

$iCnt = 0;
foreach ($addresses as $address){
    $results[$iCnt]['address'] = $document->saveHTML($address);
    $iCnt++;
}

for($iCnt = 0, $cnt = count($results); $iCnt < $cnt; $iCnt++){
    echo 'Name: '.$results[$iCnt]['name'].'<br>';
    echo 'Address: '.$results[$iCnt]['address'].'<br>';
}
?>