アプリ版:「スタンプのみでお礼する」機能のリリースについて

htmlのソースからテーブルの値を抜き出して配列に保存したいと思っています。
htmlのソース(タグなども含む)は全て変数の$dataなどに保存してある状態です。

例えば

<html>
<head>
....
<div>
<table id="sample-table">
<tr>
<td> a </td>
<td> b </td>
<td> c </td>
</tr>
<tr>
<td> d </td>
<td> e </td>
<td> f </td>
</tr>
....
<tr>
<td> x </td>
<td> y </td>
<td> z </td>
</tr>
</table>
</div>
....
</head>
</html>

の部分のa,b,c,....x,y,zの部分を順に配列に格納したいと思っています。
ご存じの方がおられましたらよろしくお願いします。

A 回答 (4件)

単純にtdタグに挟まれたデータを抜き出すだけならこんな感じで?



<?

$str=<<<eof

<html>
<head>
<div>
<table id="sample-table">
<tr>
<td> a </td>
<td> b </td>
<td> c </td>
</tr>
<tr>
<td> d </td>
<td> e </td>
<td> f </td>
</tr>
<tr>
<td> x </td>
<td> y </td>
<td> z </td>
</tr>
</table>
</div>
</head>
</html>
eof;
$pattern="/(?<=<td>).*?(?=<\/td>)/";
preg_match_all($pattern,$str,$matches);
print_r($matches);
?>
    • good
    • 1
この回答へのお礼

返事が遅くなってしまい申し訳ありません。
提示していただいた方法で実現できました。
ありがとうございます。

お礼日時:2010/08/29 14:28

DOMオブジェクトに流し込んで、


DOM APIやXpathで取り出せばどうでしょう。
<?php
mb_internal_encoding("UTF-8");

$htmldata=file_get_contents("hoge.html");
$arry = array();

$dom = new DOMDocument();
@$dom->loadHTML($htmldata);
$dom->normalizeDocument();

$xpath = new DOMXPath($dom);
$query = "/descendant::tr";

$entries = $xpath->query($query);
foreach($entries as $entry){
$tds=$entry->getElementsByTagName("td");
for ($i = 0; $i < $tds->length-1; $i++) {
array_push($arry,mb_convert_encoding($tds->item($i)->textContent), "ISO-8859-1","UTF-8"));
}
}

?>
    • good
    • 0
この回答へのお礼

返事が遅くなってしまい申し訳ありません。
提示していただいた方法では私の知識が足りずうまく動作させることができませんでした。
DOMというものをもう少し学んでからまた試してみたいと思います。

お礼日時:2010/08/29 14:29

No.2です。



htmlのソース(タグなども含む)は全て変数の$dataなどに保存してある状態です。

=>でしたね、
$htmldata=file_get_contents("hoge.html");は不要です。
@$dom->loadHTML($data);
で、いいです。
※@を付けてるのは、HTMLの文法を守ってない可能性を無視したいためです。
※文字コードは適時、お使いの環境に合わせてください。
    • good
    • 0
この回答へのお礼

読み込みは
@$dom->loadHTML($data);
で出来たようです。
ありがとうございます。

お礼日時:2010/08/30 11:56

http://jp2.php.net/manual/ja/class.domdocument.php
http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html
http://www.w3.org/TR/DOM-Level-3-Core/core.html

使うんならマニュアル読んでね。

使いこなせないなら、正規表現なり simple_xml なりでいんじゃない。
    • good
    • 0
この回答へのお礼

返事が遅くなってしまい申し訳ありません。
今回はyambejpさんの提示していただいた正規表現で実現できました。

DOMDocumentについては私の知識が足りずまだ理解できておりませんが提示していただいたマニュアルなどでいずれ理解したいと思います。

お礼日時:2010/08/29 14:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!