• ベストアンサー

コードを簡素化したいです

こんにちは。お世話になります。 元々、$modeは、time()から取得したもので、「1090693556」のように、数字データです。 ですが、後処理によって、一部の$modeに別の変数を代入して、下記のような処理をさせました。 if(($mode == "jun_0001") || ($mode == "jun_0002") || ($mode == "jun_0003") || ($mode == "jun_0004")){ echo "...........\n"; } それで、現在はjun_0001~jun_004の4つですが、もっと数が増えると辛いので、preg_matchでも使った、シンプルコードには出来ないでしょうか? 教えて下さい。

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

  • ベストアンサー
  • pica_zip
  • ベストアンサー率67% (19/28)
回答No.2

preg_matchを使うのであれば、正規表現を使って 例えば、以下のようにすると $mode が 'jun_数字' のパターンにマッチして条件分岐できます。 $pre = 'jun_'; if ( preg_match("/^$pre(\d+)$/", $mode) ) { マッチした } else { マッチしない } 正規表現の部分は適宜、工夫してみてください。 preg_match は Perl互換の正規表現が使えるようです。

参考URL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_k08.htm
waterclock
質問者

お礼

どうも ありがとうございます。 お礼が遅くなりまして申し訳ありませんでした。 メールが来ないので、何も解答がないと思ってました。

その他の回答 (3)

noname#15014
noname#15014
回答No.4

$chkstr = array("jun_0001","jun_0002","jun_0003","jun_0004"); for($i=0;$i<count($chkstr);$i++) {  if($mode == $chkstr[$i]) {   echo "......";   break;  } } 自己補足。 break入れないと駄目でスね。

waterclock
質問者

お礼

ありがとうございます。 結局、この質問をした内容部分は、他のものに置き換えて 取りあえず完了しているんですが、正規表現の方法や、 forの使い方を勉強させていただきました。 改めまして、回答して頂いた皆様へ、お礼申し上げます。

noname#15014
noname#15014
回答No.3

$chkstr = array("jun_0001","jun_0002","jun_0003","jun_0004"); for($i=0;$i<count($chkstr);$i++) {  if($mode == $chkstr[$i]) {   echo "......";  } } とかは駄目でスか。

waterclock
質問者

お礼

どうも ありがとうございます。 お礼が遅くなりまして申し訳ありませんでした。 メールが来ないので、何も解答がないと思ってました。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.1

単純に jun_0001 jun_0002 ... と、連番であるならば $x = 10; # ループ回数 for ($i=1;$i<$x;$i++) { $ch = printf("jun_%04d",$i); # 文字 + 4桁整数に整形 if ($mode == $ch) { echo "処理<br>\n"; break; } } というのはいかがでしょうか。

waterclock
質問者

お礼

どうも ありがとうございます。 お礼が遅くなりまして申し訳ありませんでした。 メールが来ないので、何も解答がないと思ってました。

関連するQ&A