質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2027閲覧

【PHP】ループ抜けの処理break

dokoniarukana

総合スコア31

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/12/21 07:46

編集2016/12/21 07:49

初心者です。
Goutteを使ってサイトからデータを抽出しています。

PHP

1 for ($i = 1; $i < 32; $i++) { 2 //日付 3 $date[] = $node->Filter('table#main')->Filter('tr')->eq($i)->Filter('td')->text(); 4 //アクセス 5 $access[] = $node->Filter('table#main')->Filter('tr')->eq($i)->Filter('a')->text(); 6} 7//配列をマージ 8$list = array_map(null, $date, $access); 9var_dump($list) 10

上記のコードで配列はこんな感じに出るんですが

array(31) { [0]=> array(2) { [0]=>string(4) "12/1" [1]=>string(5) "95783" } [1]=> array(2) { [0]=>string(4) "12/2" [1]=>string(5) "89302" } ...略 array(2) { [0]=>string(5) "12/20" [1]=>string(5) "86591" } [20]=> array(2) { [0]=>string(5) "12/21" [1]=>string(3) "×" } [21]=> array(2) { [0]=>string(5) "12/22" [1]=>string(3) "×"

日付が未来だともちろんアクセスがわからないので数値として取得されません
なので<tr>のループの最中に"×"の文字列があればループを終わりにして
最後までの取得しないようにしたいんですが、
調べてみるとbreakを使うとのことでした。

php

1 //"×"があればループを抜ける 2 if ($node->Filter('table#main')->Filter('tr')->eq($i)->Filter('a')->text == "×") { 3 break; 4 }

おそらくこんな感じ?になるのかと思いますが、
このコードをどこの箇所に挿入してもエラーが出て最後の×までループしてしまいます。
どこに入れるのが適切なのでしょうか、またこの書き方で正しいでしょうか。

目的は「配列に"×"を含まず出力する」ことなので、表題と違いますが
var_dump($list)として出す際に×があれば全て配列に出さない処理でも良いのかなと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

最初に提示してあるコードだとtext()と関数になっているので、こう書くのでは。

PHP

1if ($node->Filter('table#main')->Filter('tr')->eq($i)->Filter('a')->text() == "×") {

投稿2016/12/21 08:00

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dokoniarukana

2016/12/21 08:02

text()で出来ました! こんな簡単な見落としだったとは情けないです。 ありがとうございました。
guest

0

$listで配列まで取れているので、

php

1foreach ($list as $value) { //3回繰り返し 2 //やりたいこと 3 4 if($value[1] == 'x'){ 5 break; 6 } 7}

みたいな感じでいいんじゃないでしょうか?

投稿2016/12/21 08:06

motuo

総合スコア3027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問