- 締切済み
共通部分の処理をまとめたいです
以下はある条件に該当するものを10件分表示する処理で、正しく機能しています。 次に「ここから~ここまで」の部分は同一ソースなので、共通化しようと考えています。 一度要所の部分を表に出して(foreachの上)関数化したのですが、 Fatal error: Cannot break/continue 1 level というエラーでうまくいきませんでした。(breakを使ってはいけない場所で使っているという事のようです) //表示件数 $show_number = 10; foreach ( $output->items as $hoge ){ if(条件A){ if(条件A-1){ --------------------- ここから ---------------------------------- if( $counter >= $show_number ){break;}//表示件数設定 else { $counter++;//+1 echo "<li>『" . $hoge->id . "』</li>"; } --------------------- ここまで ---------------------------------- } } elseif (条件B)) { if(条件B-1){ --------------------- ここから ---------------------------------- if( $counter >= $show_number ){break;}//表示件数設定 else { $counter++;//+1 echo "<li>『" . $hoge->id . "』</li>"; } --------------------- ここまで ---------------------------------- } } } 知識不足で恐縮ですが、 処理をまとめる方法をご教示いただけないでしょうか。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
これが一番シンプルかなぁ。 $cnt = 10; foreach ($output->items as $hoge) { if (条件A && 条件A-1 || 条件B && 条件B-1 and !$cnt--) { break; } echo "<li>『{$hoge->id}』</li>"; } ・副作用完了点 ・演算子の優先順位 この辺りは理解しておく必要がありますけど。
- 4017B
- ベストアンサー率73% (1336/1814)
え~っと、例文は条件AでもBでも全く同じ処理(echo ~)しかして無いので、これで処理が変わると後出しジャンケンで言われても困るのです(同じ処理を定数回回すだけならfor/whileで処理すべき)。この手の質問者にはいつも言う言葉ですが「回答者はエスパーでは無い」ので。我々は常に質問者が真実公正に語っていると言う前提で回答しています。それとも作者のキモチを考えなければなりませんか…? P.S. とは言いつつ乗りかかった船。 >ifの条件の前にカウント~ 言ってる意味が訳ワカメだけど、それなら単純に if括弧内で処理させれば良いと思いますが…それだと if文毎にカウントさせないとならなくなるので、ご要望の「共通処理部分をまとめる」に反しますが??何かのトンチ大会なら、もうそろそろ種明かししてくださいませんかね。別に自分、釣りスレとか嫌いじゃ無いですよ。 もしかして想定回数、処理される前に抜けてしまう(break)と言うのであれば、berakの条件か $counterの初期数値の方を調整する事で対応可能だと思います。
- 4017B
- ベストアンサー率73% (1336/1814)
こんな感じで。 $show_number = 10; foreach ( $output->items as $hoge ){ if( $counter >= $show_number ){ break; } if( 条件A && 条件A1 ){ echo ~ } else if( 条件B && 条件B1 ){ echo ~ } $counter++; }
補足
為になるご助言ありがとうございます! 実際に取り入れてみました。 処理できる事はわかったのですが、 カウントする位置が変わっている為、もとの処理から変わっているようでした。 もとは、 ifの条件文内でカウントした場合でしたが、 ご提示いただいた処理は、ifの条件の前にカウントしていました。 “処理そのものは変えずに”というのは、このソースでは難しいでしょうか。 当方あまり詳しくないので、難易度が上がってくるようでしたらあきらめます。 (遺憾ながら理解できない可能性があるため) よろしくお願いいたします。
お礼
ご助言ありがとうございます! うまくお伝え出来ていなかったようで、すみません。 なるほど。for/whileを使うんですね。 いただいた情報を元にトライしてみます!