• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPでHTMLファイルを解析して配列へ・・・)

PHPでHTMLファイルを解析して配列へ...

このQ&Aのポイント
  • PHPを使用して、外部から取得したHTMLファイルを解析し、MySQLに格納する方法について考えています。
  • HTMLファイルの記述が一行で書かれているため、strstrとstr_replaceを使用して解析する必要があります。
  • 解析した結果を多次元配列に格納し、カテゴリとタイトルを出現順に保存したいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

きちんとしたパース処理をする手もありますが、しっかりした 法則性があり、この程度の仕分けであれば、以下のようにすればよいでしょう。 (もちろん、場合によってすこし工夫が必要ですが) <? $str=<<<eof <font color="#000000">【カテゴリ】</font><br><a href="http://xxxxxxx.xx">【タイトル】</a><br>【リンク先説明・・・】< br><font color="#000000">【カテゴリ2】</font><br><a href="http://xxxxxxx2.xx">【タイトル2】</a><br>【リンク先説明・・・2】< br> <font color="#000000">【カテゴリ3】</font><br><a href="http://xxxxxxx3.xx">【タイトル3】</a><br>【リンク先説明・・・】< br><font color="#000000">【カテゴリ4】</font><br><a href="http://xxxxxxx4.xx">【タイトル4】</a><br>【リンク先説明・・・2】< br> eof; $pettern='/<font.*?>(.*?)<\/font>.*?<a\s.*?href=\"(.+?)\".*?>(.*?)<\/a>/mis'; preg_match_all($pettern,$str,$matches); $list=Array(1=>"categ",2=>"url",3=>"title"); if(is_array($matches)){ for($i=1;$i<count($matches);$i++){ foreach($matches[$i] as $key=>$val){ $hairetu[$key][$list[$i]]=$val; } } } print "<pre>"; print_r($hairetu); print "</pre>"; ?>

noname#225112
質問者

お礼

なるほど。 法則性があるので、正規表現の上記の方法でなんとか出来ました。 思った通りに動いたので感動しました! ありがとうございます。 もっと勉強します・・・ preg_match_all()あなどれませんね