前提・実現したいこと
phpQueryで要素がないときの共通の処理を設けたいです。
発生している問題
これといっていい方法が思い浮かびません。
該当のソースコード
たとえば下記の場合ならNull合体演算子で共通の処理にできます。
// phpQueryの結果を$docに入れる $doc = phpQuery::newDocument($html); // .imageがなければ空文字になってくれる $image = $doc['#datas']->find('.image') ?? ''; // .ageがなければ空文字になってくれる $age = $doc['#datas']->find('.age') ?? '';
しかしたとえば、下記の場合に悩んでいます。つまり取得したい要素のために指定する親要素がない場合です。
PHP
1// .userがないとその時点でエラーになってしまう 2$name = $doc['#datas']->find('.user')->find('.name') ?? ''; 3 4// .tagsがないとその時点でエラーになってしまう 5$tag_results = []; 6$tag_count = count( $doc->find(".tags:eq(0)")->find(".tag") ?? [] ); 7for($i=0;$i<$tag_count;$i++){ 8 $tag_results[] = trim ( $doc->find(".tags:eq:eq(0)")->find(".tag:eq($i)")->text() ?? '' ); 9} 10
試したこと
自分の発想では下記のように1つずつ存在を確認するという手はずになります。よくいえば丁寧かもしれませんが、とても冗長に思えます。
何がいい方法なのかわからないのですが、どうしたらいいと思いますか?
PHP
1// .userを確認し、ある場合だけ.nameを取得する 2$name = ''; 3$user= $doc['#datas']->find('.user') ?? ''; 4if($user){ 5 $name = $user->find('.name') ?? ''; 6} 7 8// .tags を確認し、ある場合だけ.tagを取得する 9$tag_results = []; 10$tags = $doc->find(".tags") ?? ''; 11if($tags){ 12 $tag_count = count( $doc->find(".tags:eq(0)")->find(".tag") ?? [] ); 13 for($i=0;$i<$tag_count;$i++){ 14 $tag_results[] = trim ( $doc->find(".tags:eq:eq(0)")->find(".tag:eq($i)")->text() ?? ''); 15 } 16}
あなたの回答
tips
プレビュー