2017-07-14 27 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);