###追記
思うようにうまくいかないので質問を変えます。
$node->Filter('ul')->eq($i)->Filter("li")->eq(1)->text();
であれば終了時間だけの配列を出す
そうでなければ空白のまま
ということをしたいので回答頂いた以下のコードを使用しましたが
if($lis->count() <= 1) {の部分がエラーと出ました。
if内の条件をいろいろ試してみましたがeq(1)があるかないかの
判別という式はどのように行うのが最適なのでしょうか。
$i = 0; for($i = 0; $i < 10; $i++){ if($node->Filter('div')){ $lis = $node->Filter('ul')->eq($i)->Filter("li"); if($lis->count() <= 1) { $time2[] = null; } else { $time2[] = $lis->eq(1)->text(); } } } var_dump($time2);
Goutteを使用しています。
以下のようなソースがあって
<ul> <li> <span>開始 12:00~</span></li> <li> <span>終了 17:00</span></li> <ul> <li> <span>開始 20:00~</span></li> <ul> <li> <span>開始 16:00~</span></li> <li> <span>終了 21:00</span></li>
ul li の中の時間を全て取得したいのですが、
中段にある<ul>は<li>タグが1つしかありません。
例として簡潔に書いていますがこの下にも同様に続いています。
今考えているのは、開始時間と終了時間を別々の配列にとって
あとからarray_mergeするっていう感じなんですが、
終了時間だけを取得しようとすると当然無いタグは取れないのでエラーが出てきてしまいます。
//開始時間 $i = 0; for($i = 0; $i < 10; $i++){ if($node->Filter('div')){ $time[] = $node->Filter('ul')->eq($i)->Filter("li")->text(); } } var_dump($time)
↓
array(10) { [0]=> string(10) "開始 12:00" [1]=> string(10) "開始 20:00" [2]=> string(10) "開始 16:00"
//終了時間 $i = 0; for($i = 0; $i < 10; $i++){ if($node->Filter('div')){ $time2[] = $node->Filter('ul')->eq($i)->Filter("li")->eq(1)->text(); } } var_dump($time2)
↓
<b>Fatal error</b>: Uncaught exception 'InvalidArgumentException' with message 'The current node list is empty.'
###やりたいこと
array(10) { [0]=> string(10) "終了 17:00" [1]=> string(10) "" [2]=> string(10) "終了 21:00"
これをマージして以下のようにするのが最終的な目標です。
よい対処法があれば教えてください。
array(10) { [0]=> array(2) { [0]=> string(10) "開始 12:00" [1]=> string(10) "終了 17:00" } [1]=> array(1) { [0]=> string(10) "開始 20:00" [1]=> string(0) "" } [2]=> array(2) { [0]=> string(10) "開始 16:00" [1]=> string(10) "終了 21:00"
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/26 07:43
2016/11/26 08:23
2016/11/26 08:49
2016/11/26 09:11