2017-07-14 52 views
-4

我要抓取与preg_match_all()几页和数据保存到一个数组($matches),网址是这样的: webpage.com/p/1,并在年底的nuber是多少子页面并且必须随每次运行而改变。 我想过类似的东西(有10子页面):如何将数据推到阵列while循环PHP

$x = 1; 
while ($x <= 10) { 

    $current_page = 'webpage.com/p/$x'; 
    $subpage = file_get_contents($current_page);  
    preg_match_all('regexp', $subpage, $matches); 
    $matches = $matches[1]; 


$x++; 
} 

,但似乎像数组只包含从第一次运行的数据,我该怎么办错了吗?

+2

'$匹配= $匹配[1]'你知道这个代码是什么? –

+0

检查array_push()https://www.w3schools.com/php/func_array_push.asp – user1211

+0

$匹配是一个字符串。你需要使用'$ allmatches [] = $ matches [1];'我的意思是匹配在最后一行。真令人费解的是,在两件事情上使用同一个名字。正如你可以看到这是一件坏事 – Andreas

回答

0
$current_page = 'webpage.com/p/'.$x; 

$ x之前是一个静态字符串,并且在循环中没有更改。

+0

谢谢你,先生,那正是我错过的! – sh00t

+0

你也可以替换'with',他的代码就可以了。https://3v4l.org/uvMhe – Andreas

+0

@ sh00t不,你不是所有的人都没有。你在HTML上使用正则表达式,它会返回并咬人你正在做的工作没有太多的工作,你正在用正则表达式的匹配覆盖你的字符串。 – Andreas

1

你可以尝试一些类似于如下 - 确保您不会覆盖$matches为发生的事情

$data=array(); 
$regex=''; 
for($i=0; $i < 10; $i++){ 
    $html = file_get_contents('http://www.webpage.com/p/'.$i);  
    preg_match_all($regex, $html, $matches); 
    $data[] = count($matches) > 1 ? $matches[1] : false; 
) 
$data=array_filter($data); 
print_r($data);