Php 组合2个单独的foreach循环
到目前为止,我已经成功地从外部网站上抓取了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=全科医生执业机构的名称
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>';
}
?>