• ベストアンサー

【PHP】条件が一致したときだけループを開始

条件によってループを開始したりスル―したりする方法はありますか? if文の中だけで完結するループではなく、ループ文の最初と最後だけをスルーしたいのですが、どうしても方法が思い浮かびません。 if(条件){ 判定 } foreach( ){ ← 判定によってここをスルーしたい print "abcdefg"; ← ここは常に実行したい } ← foreach がスルーされているので、ここも消したい foreachの中身が短ければ、2パターン作ればいいと思うのですが、数千行になってしまっているので、できれば条件によってスルーしたいのですが、そもそもPHPでこれは可能なんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

条件にかかわらず最低1回は処理を実行するループはdo-while構文 http://php.net/manual/ja/control-structures.do.while.php foreachは条件分が先にあるので処理することはできません

yamatonadeshico
質問者

お礼

今回はincludeを使うことによって最小限のコードで問題は解決しましたが、質問に対する答えとして一番よかったのはこちらかなと思いまして、yambejpさんの解答をベストアンサーにさせて頂きました。 個人的にdo-while構文は全然使わなかったので、とても勉強になりました。 ありがとうございました。

その他の回答 (3)

noname#244856
noname#244856
回答No.5

典型的なゴミコードですね。 いや、ちょっと異常なケースかも・・・ foreach($arr as $item){ print "abcdefg"; } ↓ $loop = ループするかどうかのブール値; foreach ($arr as $item) { print "abcdefg"; if (!$loop) { break; } } これで済むような内容であればいいんですが、条件によって$itemを使ったり使わなかったり分岐するようであれば2パターン作るしかないですね。

yamatonadeshico
質問者

お礼

真ん中の処理部分をincludeすることで、最小限のコードでイメージ通りに実行することが出来ました。 上記の方法も勉強になりました。 ありがとうございました。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

ダメダメなソースの修正を引き受けてしまったのですかねぇ・・・ 余計に見づらくなってしまいますが $Loop = true; if (判定) { $Loop = false; } foreach( ){ // とりあえず常にループ開始 if ($Loop) { // ループが必要な条件のときだけ実行する処理 } print "abcdefg"; ← 常に実行したい if ($Loop) { // ループが必要な条件のときだけ実行する処理 } print "abcdefg"; ← 常に実行したい  :  : if ( ! $Loop) { break; } // ループが必要ない条件のときは1回でbreak; } のように書くしかないです。 判定が1~2箇所程度という前提です。もしあちこちで判定が必要ならやってはいけません。

yamatonadeshico
質問者

お礼

後になって重要な機能を取り付けたくなってしまったんです。 最初からそのアイデアがあれば、こんなことにはならなかったのですが、なんせ後付なものでこんなことに・・・^^; 今回はincludeを使うことによってうまく行きました。 ありがとうございました。

回答No.2

何を言っているのか意味がわかりません。 ループ関数内に記述しているのに、ループしていない時に処理させたいというのは ムリなお話です。 条件を明確にした上で関数化するなどして責任範疇を分断することによって 可能かと思います。 コードが異常な状態で、改修することによる影響がでかくて手を出しづらいという 場面で最も楽なのは、ループかループじゃないかを切り分けて処理すれば済む話では ないでしょうか? if (hoge) {  // ループじゃない時に常に走行させる処理  print "abcdefg"; } else {  foreach() {   // ループ処理  } }

yamatonadeshico
質問者

お礼

そういう手もあるんですね。 勉強になりました。 今回はincludeを使う事でうまく行きました。 ありがとうございました。