• 締切済み

SimpleHTMLDOMParserについて

PHP Simple HTML DOM Parserを最近使い始めて まだ基本的な部分しかわからず困っています。 現在ショッピングサイトのデータを自サイトに表示するために 取得を行なっているのですが ショッピングサイトのテーブルにクラス属性などがあまり無く 指定した物を取得する方法で行き詰っています。 属性などが無いので foreach ($html->find('td[align=center] a') as $element) { array_push($test, $element); } 等で取得を行い商品とタイトルと価格等は表示が行えるようになりました。 しかし、必要のないものまで含まれてしまい その部分だけを除外したいのですが、除外方法等はありませんでしょうか? イメージ的には foreach ($html->find('td[align=center] a, td[class!=jogai]') as $element) { array_push($test, $element); } このようにすればjogaiのクラス属性を除けるかと思ったのですが 違ったようでうまくいきません・・・ 結果として、tdのalign属性=centerを取得してtdにjogaiのクラス属性が付いているものは取得しない と言う結果を望んでいます。 お分かりになる方がいましたらご教示お願いいたします。

みんなの回答

回答No.1

foreach($html->find('td[align=center]') as $element){ if($element->attr('class') != "jogai"){ array_push($test, $element); } } とか、foreach内で振り分けを行えば良いのではないでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 非共通要素を抜き出す

    perlを勉強し始めたのですが、 今 非共通要素の抜き出しに苦心しています。 助けていただければうれしいです。 以下は私が試したものなのですが どうも非共通要素を抜き出せないでいます。 何故なのでしょうか? @array = (1..10); @cmp_array = (5..10); @notfound=(); foreach $array_element (@array) { foreach $cmp_array_element (@array) { if ($array_element != $cmp_array_element) { push @notfound, $array_element; } } }; よろしくお願いします。

    • ベストアンサー
    • Perl
  • PHPの読解お願いいたします

    PHP初心者です。 環境 XAMPP1.7.0(最新) アパッチなど一括ダウンロード OS:ビスタ 多次元配列について以下のコードについて疑問があります。 ●の部分が疑問点となっております ~~~~~~~~~~~~~~~~~~~~~~~~~~~ <body> <table border="2"> <tr> <th>都市名</th><th>最高気温</th><th>最低気温</th> </tr> <?php $data=array( array("東京",32,25), array("名古屋",28,21), array("大阪",27,20), array("京都",26,19), array("福岡",27,22), ) foreach($data as $city){ print "<tr>"; ● foreach($city as $value) print "<td>{$value}</td>"; ●● } print "</tr>"; ?> </table> </body> </html> ~~~~~~~~~~~~~~~~~~~~~~~~~~ ●・・ここで<tr>を持ってくる必然性がわかりません。 例えば print "<td>{$value}</td>"のコードの<td>の横に付けることでも可能ではないのしょうか? ●●・・foreachがネストになり、多次元配列となっています。 まず$dataを取得しそれぞれを$cityに格納、次のforeachで$cityに格納された1行目のarray("東京",32,25)を一つづつ$valueに格納していくのだとは思いますが、例えばこのforeachネストの一連の流れを以下のように1つのforeachで記載することがなぜエラーになるのか分かりません。 foreac($data as $city){ print "<tr><td>{$city}</td></tr>" } $cityの中にはarray("東京",32,25) array("名古屋",28,21), array("大阪",27,20),array("京都",26,19),array("福岡",27,22), が格納されているので、別にこれをネストして{$value}に格納しなくてもそのまま変数$cityのみで表を作成できるのではないかと思っています。 まあでもエラーが出ますので、私の考えに大きな誤りがあるわけですが、誤っている部分をご指摘ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • テーブルデータ表示

    mysqlからデータをphpで取得し以下のような多次元配列になっています。 Array ( [0] => Array ( [id] => 116 [name] => あああ ) [1] => Array ( [id] => 58 [name] => いいい ) [2] => Array ( [id] => 89 [name] => ううう ) ) 単純にデータを表示させたく以下のようにしましたが<th>$key2</th>の箇所が上記配列の場合 2回繰り返されて表示されてしまいます。ここはフィールド名なので1回の表示でいいのですが どのように記述すれば思うような表示になるでしょうか? echo "<table border=\"1\">"; echo "<tr>"; foreach ($tmp1 as $key => $val) { foreach ($val as $key2 => $val2) { echo "<th>" . $key2 . "</th>"; //フィールド名 } } echo "</tr>"; foreach ($tmp1 as $key => $val) { echo "<tr>"; foreach ($val as $key2 => $val2) { echo "<td>" . $val2 . "</td>"; // 取得したデータをある分だけ繰り返し } echo "</tr>"; } echo "</table>";

    • ベストアンサー
    • PHP
  • Smarty 三次元配列を使いたい

    最近Smartyを使い始めた者です。 以下のような多次元配列を、$smarty->assign('data', $data); します。 $data = array( [0] => array( [id] => 23 [comment] => 'aaa' [name] = array( [0] => 'xxx' [1] => 'yyy' )) [1] => array( [id] => 24 [comment] => 'bbb' [name] = array( [0] => 'zzz' )) [2] => array( [id] => 25 [comment] => 'ccc' [name] = array( [0] => 'ttt' [1] => 'uuu' )) ) そして、以下のようなテーブルを表示させたいのです。 |-------------------| | 23  | aaaa | xxxx | |    |     |------| |    |     | yyyy | |-------------------| | 24  | bbbb | zzzz | |-------------------| | 25  | cccc | tttt | |    |     |------| |    |     | uuuu | |-------------------| <td>タグのrowspan属性を使おうと思っています。 {foreach}をつかって、以下のようなものを書きましたが、駄目でした。 {foreach from=$data item=value01 name=kiji} <tr> <td rowspan="{$value01.numgoods}">{$value01.id}</td> <td rowspan="{$value01.numgoods}">{$value01.comment}</td> {foreach from=$value01 item=value02 name=goods} {if $smarty.foreach.goods.first} <td>{$value02.name.0]</td></tr> {else} <tr> <td>{$value.name.1}</td> </tr> {/if} {/foreach} {/foreach} エラー表示は、 syntax error: unrecognized tag: $value02.name.0 です 本当は、$value02.name の.0を三次元での要素数分だけ自動でループしてほしいのですが、その書き方がわかりません。 ネットをあさっても、これと言うサイトを見つけれません。 そもそも、三次元目の要素を取得するsmartyの方法がわかりません。 どなたかご教授の程、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpとmysqlでサイトのコンテンツを制作しているのですが...

    phpとmysqlでサイトのコンテンツを制作しているのですが、どうにも解決できないのでどなたかアドバイスをいただけないでしょうか? mysqlで $result = @mysql_query( 'drop tabl main_categories;' ); $sqlstr = "create table main_categories (id INTEGER primary key AUTO_INCREMENT,"."category TEXT)"; $result = mysql_query( $sqlstr ); としてテーブルを作ってこれをphpでデータを取得し格納したいのですがうまくいきません。取得データを $arr=mysql_fetch_array($result); で格納してforeachで出力?したいのですが。。。 foreach( $arr as $key => $value ) { if($value['category'] != ''){ array_push($categories_arr,$value['category']); array_push($catid_arr,$value['id']); } } どなたか教えてください!もう8hはまってます=3

    • 締切済み
    • PHP
  • HTMLから正規表現で必要な情報を取得したい

    以下のようなHTMLがあり、PHPで正規表現を使い(A)~(J)の値を取得したいのですが、 どのような正規表現を書けば取得できるか迷っています。 正規表現でなくとも取得できる方法があればご教示ください。 どうかお願いいたします。 ※ちなみにPHP5です。 ---------------------------------------------------------- ~省略~ <tr bgcolor="#ffffff"> <td align="center">(A)<br></td> <td align="center">(B)<br></td> <td align="center">(C)<br></td> <td><a href="http://aaaaa.co.jp">(D)</a><br></td> <td align="right">(E)</td> <td align="right">(F)<br></td> <td align="right">(G)</td> <td align="right">(H)</td> <td align="right">(I)</td> <td align="center" nowrap><font color="#FFFFFF">(J)</font></td> </tr> ~省略~

    • ベストアンサー
    • PHP
  • PHPでの単語の出現回数表示

    単語 回数  I   1 am 1 a 4 boy 2 . 4 This 1 is 3 pen 1 That 1 desk 1 He 1         ↑ ずれてしまいますが回数と同じ行です。 と上のように出したいのですが何をすればいいのかがわかりません参考書等を見てforeachを使うことがわかったのですが使い方がいまいちよくわかりませんどうかお願いします! 自分なりにやってみたのが下です <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <?php $str ="I am a boy.This is a pen.That is a desk.He is a boy."; $data = split(" ",$str); foreach($data as $tango) $count[tango]++; foreach($count as $tango => $value){ print "<tr><td align='center'>$tango</td>"; print "<td align='right'>$value</td></tr>"; ?> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • VBAでホームページに表示された情報をセルに分割して取得していきたいのですのですがどのように記述したらよろしいでしょうか。

    宜しくお願い致します。 HTMLを長々と記述しておりますが、お許しください。 VBAでホームページに表示された情報をセルに分割して取得していきたいのですのですがどのように記述したらよろしいでしょうか。 以下のようなHTMLがありまして、エクセルのWEBクエリを利用して取得していこうかと思ったのですが、エラーが表示されてしまいうまく取得することができませんでした。 そこで、ブラウザコントロールでしたら、ページが表示された時点で、 すべての情報の取り込みが完了してますので、HTMLをうまく解体すればセルに情報を格納できるかと思ったのですが、どのようにデータを解体・取得すればいいのかが分からない状態ですので、是非御教授いただけたらと思っております。 なお、以下のHTMLは一行目に項目二行目にその項目に基づいた情報が記載されておりまして、今回は二行目までの記述となっておりますが、基本的には複数行にわたるものとなっておりますので、是非その点に関しても踏まえたうえでのアドバイスをいただけたらと思っております。 ご面倒をおかけいたしますが、何卒宜しくお願い致します。 <TABLE width="100%" border="1" cellspacing="1" cellpadding="3"> <TR bgcolor="#006633"> <TD align="center" nowrap><FONT color="#FFFFFF">訂正<BR>取消</FONT></TD> <TD align="center" width="11%"><FONT color="#FFFFFF">口座区分</FONT></TD> <TD align="center"><FONT color="#FFFFFF">銘柄</FONT></TD> <TD align="center" width="13%" nowrap><FONT color="#FFFFFF">取引区分<BR>執行条件</FONT></TD> <TD align="center" width="5%"><FONT color="#FFFFFF">売買</FONT></TD> <TD align="center"><FONT color="#FFFFFF">発注数[株]</FONT></TD> <TD align="center"><FONT color="#FFFFFF">値段[円]</FONT></TD> <TD align="center" width="8%"><FONT color="#FFFFFF">受付日時</FONT></TD> <TD align="center" width="5%"><FONT color="#FFFFFF">有効期間</FONT></TD> <TD align="center" width="5%"><FONT color="#FFFFFF">状態</FONT></TD> <TD align="center"><FONT color="#FFFFFF">約定<BR>数量[株]-単価[円][時間]</FONT></TD> </TR> <TR bgcolor="#CCCCCC"> <TD align="center" valign="middle" bgcolor="#CCCCCC"><BR></TD> <TD align="center" valign="middle">**</TD> <TD align="center" valign="middle"><A href="/servlet/ITS/direct/DirectStkOrder;********************・・・・" onClick="return linkCheck()"><FONT color="#211799"><B>*****</B><BR>*****/FONT></A></TD> <TD align="center" valign="middle">**<BR>-</TD> <TD align="center" valign="middle"><FONT color="#990000"><B>*</B></FONT></TD> <TD align="right" valign="middle">****</TD> <TD align="right" valign="middle">****</TD> <TD align="center" valign="middle">**/**<BR>*******</TD> <TD align="center" valign="middle">当日</TD> <TD align="center" valign="middle"><B><A href="/servlet/ITS/stock/StkOrderDetail**********************・・・・・" onClick="return linkCheck()"><FONT color="#211799">**</FONT></A></B></TD> <TD align="right" valign="middle"><BR></TD> </TR> </TABLE>

  • foreachの間にテーブルの<TR>を出力

    HTMLのテーブルにデータを入れたいのですが、 6列ごとに改行の<tr></tr>を入れる方法が分かりません。 下のように並べたいです [ITEMNAME][ITEMNAME][ITEMNAME][ITEMNAME][ITEMNAME][ITEMNAME] [ITEMNAME][ITEMNAME][ITEMNAME][ITEMNAME][ITEMNAME][ITEMNAME] データは1~12個きますので、一行の時と二行にわたる時、<td></td>に何もデータが入らない時もあります。 今現在このような感じです。 <table width="600"> <tr> <?php foreach ($item_array as $item){ ?> <td width="100" align="center"> <?=$str = mb_strimwidth($item['ITEMNAME'], 0, 100, "...");?> </td> <?php } ?> </tr> </table> どうか宜しくお願い致します。 既に他で同じ内容が出ていますが、そちらでは理解して応用できませんでしたので改めて質問させて頂きました。ごめんなさい。

    • ベストアンサー
    • PHP
  • 配列の初期化について(foreachを使う際)

    配列を、foreachの中で処理して、再び配列に入れたいです。 foreach ($a as $b) {   $tmp[]=処理($b); } ってやると、配列で取得できるのですが、 $tmp=array(); foreach ($a as $b) {   $tmp=処理($b); } ってやると、配列にならずに、 1つしかとれません。 どちらも、配列を初期化しているつもりなのですが、 $tmp=array();と、$tmp[]では、何が違うのでしょうか?

    • ベストアンサー
    • PHP