空数组(不是空的)

时间:2012-12-09 16:58:59

标签: php regex arrays

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 )[...]

2 个答案:

答案 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执行类似操作。它不会那么优雅,但仍然更加强大和可读。