すべての画像を抽出するプログラム
-以下
include_once('simple_html_dom.php');
$html = file_get_html( '**' );
$src = array();
foreach($html->find('img') as $key => $element){
$src[$key] = $element->src;
}
foreach($src as $img){
echo '<img src="'.$img.'">';
}
-以上
http://www.kaasan.info/archives/1457
のサイトをほぼ写しただけで動きます。
最初の5つだけを抽出する構文が書けません。
僕の書いた下記内容だと無限ループしているように思います。
下記内容を元に修正orアドバイスいただけると助かります。
-下記(最初の5つの画像だけ配列に入れる)僕が書いたプログラム
$src = array();
for ($i = 1; $i <= 5; $i++) {
$src[] = $html->find('img');
}
print_r($src);
-下記 以上
よろしくお願いします
break を使用してはダメですか?
foreach($html->find('img') as $key => $element){ $src[$key] = $element->src; }
$i=0; foreach($html->find('img') as $key => $element){ $i++; if( $i > 5 ) { break; } $src[$key] = $element->src; }
----
ああ、回答が被りましたね。やっていることは同じです。
$html->find('img')が何をしているのか、$key => $elementはどのような挙動をしているのかをステップ実行をしながら確認をすると、理解が深まると思います。
src に五個のデータを突っ込んだら、ループから抜けるようにしてみました。
<?php include_once('simple_html_dom.php'); $html = file_get_html( '**' ); $src = array(); $i = 0; foreach($html->find('img') as $key => $element){ $src[$key] = $element->src; if (++$i >= 5) { break; } } foreach($src as $img){ echo '<img src="'.$img.'">'; } ?>
早速お返事ありがとうございました。
break を使用してはダメですか?
foreach($html->find('img') as $key => $element){ $src[$key] = $element->src; }
$i=0; foreach($html->find('img') as $key => $element){ $i++; if( $i > 5 ) { break; } $src[$key] = $element->src; }
----
ああ、回答が被りましたね。やっていることは同じです。
$html->find('img')が何をしているのか、$key => $elementはどのような挙動をしているのかをステップ実行をしながら確認をすると、理解が深まると思います。
一つの感覚としての捉え方となりますが、色々な味が入ったお菓子が$element
そのなかの一つの味を指定したものが$element->srcになります。
まず、$htmlという巨大な箱にimgタグやdivタグ等の全てを入れます。($htmlというオブジェクトが出来上がります。)
今回は、imgタグ以外は必要ないので、$html->find('img')としてimgタグだけを分別します。
ここまでをコードで表すと、以下になります。(例として取得先はこのページにします。)
include_once('simple_html_dom.php');
$html = file_get_html( 'http://q.hatena.ne.jp/1380187850’ );
$src = array();
$c=$html->find('img');
この例の場合、$htmlの中には1500個程度、$html->find('img')の結果を入れた$cには70個程度の何かが入った箱(要素)が入っています。
今回、$cには順番に番号が振ってあります。
これで「1.imgタグのある部分を、$elementにキー値をつけて代入」の準備が出来たので、実際にforeachを使って箱の中身を開けていきます。
foreach($c as $key => $element){
//$c=imgの要素が入った色々な箱たち
//$key=箱の指名
//$element=指名された箱の「中身」
$src[$key] = $element->src;
}
※「2.$iに1を足して5以上だったら処理中止」は抜いてあります。
$elementの中はURLだけじゃないの?と感じますが、説明文や、HTMLのクラス名など、色々入っています。
ですから、「$elementの中にあるsrc(URL)が欲しいのです」と指名してあげます。
これが、$element->src
これを$srcという新しい箱に移し替えるのですが、その際に名前を付けておきたいので、$keyをそのまま使っています。
この部分が「3.$element変数のsrc要素を$src変数のkey値に代入する」です。
「$cには順番に番号が振ってある」ならforでも何とかなりそう?
出来なくもありませんが、
$a = array(
"one" => "ひとつめ",
"two" => "ふたつめ",
"three" => "みっつめ",
"seventeen" => "突然の17"
);
foreach ($a as $key => $value) {
echo "\$a[$key] => $value.\n";
}
こんな使い方も出来るのです。
http://php.net/manual/ja/control-structures.foreach.php
ふわふわとした解説ですが、参考になれば幸いです。
ありがとうございました。
もう何年も、初心者レベルです。
雲が晴れてきたような感じを味わっております。
「->」の使い方、意味がよくわからなかったように思っております。
ありがとうございました。
これからもよろしくお願いします。
一つの感覚としての捉え方となりますが、色々な味が入ったお菓子が$element
そのなかの一つの味を指定したものが$element->srcになります。
まず、$htmlという巨大な箱にimgタグやdivタグ等の全てを入れます。($htmlというオブジェクトが出来上がります。)
今回は、imgタグ以外は必要ないので、$html->find('img')としてimgタグだけを分別します。
ここまでをコードで表すと、以下になります。(例として取得先はこのページにします。)
この例の場合、$htmlの中には1500個程度、$html->find('img')の結果を入れた$cには70個程度の何かが入った箱(要素)が入っています。
今回、$cには順番に番号が振ってあります。
これで「1.imgタグのある部分を、$elementにキー値をつけて代入」の準備が出来たので、実際にforeachを使って箱の中身を開けていきます。
※「2.$iに1を足して5以上だったら処理中止」は抜いてあります。
$elementの中はURLだけじゃないの?と感じますが、説明文や、HTMLのクラス名など、色々入っています。
ですから、「$elementの中にあるsrc(URL)が欲しいのです」と指名してあげます。
これが、$element->src
これを$srcという新しい箱に移し替えるのですが、その際に名前を付けておきたいので、$keyをそのまま使っています。
この部分が「3.$element変数のsrc要素を$src変数のkey値に代入する」です。
「$cには順番に番号が振ってある」ならforでも何とかなりそう?
出来なくもありませんが、
こんな使い方も出来るのです。
2013/09/27 00:55:00http://php.net/manual/ja/control-structures.foreach.php
ふわふわとした解説ですが、参考になれば幸いです。
ありがとうございました。
2013/09/27 10:48:13もう何年も、初心者レベルです。
雲が晴れてきたような感じを味わっております。
「->」の使い方、意味がよくわからなかったように思っております。
ありがとうございました。
これからもよろしくお願いします。