while($row = mysql_fetch_row($result)){
preg_match('#<span id="lblNumerZgloszenia" style="font-weight:bold;font-style:italic;">([^<]*)<\/span>#',$row[1],$matches);
$query2 = 'UPDATE content_pl SET kategoria_data='.$matches[1].' WHERE id='.$row[0].';';
mysql_query($query2);
}
我正在执行此操作preg_match
以将span
内容转换为$matches
数组。
当我执行print_r($matches)
时,它会显示正确的结果,但是当我使用$matches[1]
时,浏览器会告诉我没有这样的索引。
编辑:print_r
显示
[...]Array ( [0] => TOW: (210) 252250, (220) 01-07-2002 [1] => TOW: (210) 252250, (220) 01-07-2002 ) Array ( [0] => TOW: (210) 252251, (220) 01-07-2002 [1] => TOW: (210) 252251, (220) 01-07-2002 ) Array ( [0] => TOW: (210) 252252, (220) 01-07-2002 [1] => TOW: (210) 252252, (220) 01-07-2002 ) Array ( [0] => TOW: (210) 252253, (220) 01-07-2002 [1] => TOW: (210) 252253, (220) 01-07-2002 )[...]
答案 0 :(得分:3)
你在while
循环中执行此操作,这意味着它可能不止一次发生。如果你只是print_r($matches); exit;
,你可能会注意到你得到了你期望的东西,但这只是你循环的一次迭代。
最有可能的情况是至少一种情况,您找不到任何匹配项。您应该使用mysql_query
语句来检查if
的返回值,包装您的第二个preg_match
(不推荐使用,BTW - 您可能希望在项目很小的情况下切换到PDO)呼叫。仅在preg_match
返回&gt;时运行查询0
答案 1 :(得分:2)
让我向您展示比parsing HTML with regex更好的方法。 Here is convenient library为您解析。代码变得非常简单(可读):
$html = new simple_html_dom();
$html->load($row[1]);
$span = $html->find('span[id=lblNumerZgloszenia]', 0);
$data = $span->innertext;
$query2 = 'UPDATE content_pl SET kategoria_data='.$data.' WHERE id='.$row[0].';';
如果由于某种原因无法使用第三方库,则可以使用built-in DOM module执行类似操作。它不会那么优雅,但仍然更加强大和可读。