その2:simple_html_dom.phpの質問です


http://q.hatena.ne.jp/1446098727
の関連です。

前回は
http://1811way.com/work008/sample09.html
でしたが、

「SubjectNoTest Top 文字だけが途中で入ってきた」
を加えた場合、
http://1811way.com/work008/sample10.html

親のルートに<h2,h3,h4>タグが続いた場合
(=h系のタグにはul,liタグがないもの)は

3.[Subject]:SubjectNo2 Top > SubjectNo2 Second > SubjectNo2 Third > SubjectNo2 4Th
->
3.[Subject]:SubjectNoTest Top 文字だけが途中で入ってきた&SubjectNo2 Top> SubjectNo2 Second > SubjectNo2 Third > SubjectNo2 4Th

というように、
次に出てくるh系のタグでul,liタグを持つものをSubjectに追加する
というような処理を考えているんですができません。

前回書いていただいた
if (count($ul_child) == 0) {
のelseあたりで処理をしてやればいいのかとも思いますが、
書けません。

すいません。書いていただけると助かります。
もし、お忙しければ、ヒントだけでもいただけると大変助かります。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2015/11/12 21:38:44
  • 終了:2015/11/13 07:29:46

ベストアンサー

id:a-kuma3 No.1

a-kuma3回答回数4524ベストアンサー獲得回数18802015/11/12 22:35:25

ポイント300pt

パンくずのリストを、文字列ではなく要素の配列にしてたのが幸いして、思ったより早くできました :-)

前のコードで、パンくずの候補から文字列を抜き出す関数を定義していました。

function text_content($e) {
    return $e->plaintext;
}

これを、その要素のテキストだけではなく、更に前の方にたどって見出し要素であれば、それらのテキストを「&」でつなげたものを返すようにします。

function text_content($e) {
    $s = '';
    while ($e != null && preg_match('/^H[1234]/i', $e->tag)) {
        $s = $e->plaintext . ($s == '' ? '' : ' & ') . $s;
        $e = $e->prev_sibling();
    }
    return $s;
}

見出し要素が三つ、四つ続いていても、同じ階層である限り連結します。

Phpfiddle で試した結果です。
http://phpfiddle.org/lite/code/79qj-v0x3

id:kohhi

ありがとうございました。目から鱗、でした。すぐ回答いただき、大変助かりました。

2015/11/13 07:29:33

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません