0
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数组中。当我执行 aprint_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 )[...]
4

2 回答 2

3

您在while循环中执行此操作,这意味着它可能不止一次发生。如果你只是print_r($matches); exit;你可能会注意到你得到了你所期望的,但这只是你循环的迭代之一。

最有可能的是,至少在一种情况下您找不到任何匹配项。您应该使用检查调用返回值的语句来包装您的第二个mysql_query(不推荐使用,顺便说一句 - 如果您的项目很小,您可能希望切换到 PDO)。仅在返回 > 0时运行查询ifpreg_matchpreg_match

于 2012-12-09T17:07:07.377 回答
2

让我向您展示一种比使用 regex 解析 HTML更好的方法。这是一个方便的库来为你做解析。代码变得非常简单(并且可读):

$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].';';

如果由于某种原因不能使用 3rd-party 库,您可以使用内置的 DOM 模块做类似的事情。它不会那么优雅,但仍然更加健壮和可读。

于 2012-12-09T17:09:19.870 回答