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$matchesprint_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;期待どおりの結果が得られたことに気付くかもしれませんが、それはループの反復の 1 つにすぎません。

ほとんどの場合、一致するものが見つからないケースが少なくとも1 つあります。呼び出しの戻り値をチェックmysql_queryするステートメントで 2 番目 (これは非推奨です。ところで、プロジェクトが小さい場合は PDO に切り替えたい場合があります) をラップする必要があります。戻り値 > 0の場合にのみクエリを実行するifpreg_matchpreg_match

于 2012-12-09T17:07:07.377 に答える
2

HTML を regex で解析するよりも優れたアプローチをお見せしましょう。これは、解析を行うための便利なライブラリです。これにより、コードは非常にシンプル (かつ読みやすく) になります。

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

何らかの理由でサードパーティのライブラリを使用できない場合は、組み込みの DOM モジュールを使用して同様のことを行うことができます。それほどエレガントではありませんが、それでもはるかに堅牢で読みやすいものになります。

于 2012-12-09T17:09:19.870 に答える