• ベストアンサー

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

こんにちは。お世話になります。 元々、$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でも使った、シンプルコードには出来ないでしょうか? 教えて下さい。

  • PHP
  • 回答数4
  • ありがとう数5

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

  • ベストアンサー
  • 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

  • preg_match( '/^(\D+)(\d*)$/' , $変数 , $regs )

    if( ! preg_match( '/^(\D+)(\d*)$/' , $変数1 , $regs ) ) { echo ( 'invalid dirname: ' . htmlspecialchars( $変数1 ) ); } $変数2 = $regs[2] === '' ? '' : intval( $regs[2] ) ; 正規表現だと思うのですが、どういう意味か教えてください。 □分からないなりに考えてみました… ▽1行目 $変数の内容が、'/^(\D+)(\d*)$/'にマッチしなければ、$regs へ代入。 ▽2行目 マッチしていた場合は、htmlspecialchars関数を実行した後、'invalid dirname: '+その結果を表示する。 ▽3行目 $regs配列変数の1番目を、何かして、$変数2 へ代入する。 ……誰か教えてください…。

    • ベストアンサー
    • PHP
  • PHPの正規表現 メール受信と文字コードについて

    Yahooのメールサーバに接続しメールを取得、メール本文に特定の語句が含まれているか調べたいのですが、うまく行かず悩んでいます。 SJIS文字コードが原因なんでしょうか? かなり長い文章になるので、お暇でしたらご教授下さい。 PHP Version 5.2.5です。 以下のプログラムでの問題点です。 <?php $mb=imap_open("{pop.mail.yahoo.co.jp:110/pop3}INBOX","ID","pass") or die("メールボックスを開けません<br>"); $i=4;//メール番号 //imap_fetchbody、mb_convert_encodingで取得した変数<$body_sjis>と比較する為、メール本文を変数<$mail_honbun>としてファイル内に定義。 $mail_honbun="次のことはを感じで、書きなさい。(すべて)手へんの漢字です。 「正解」はこのあとすぐ。仕上げの湾カールが決まるのは:エッセンシャルダメージケア新発売"; $body=imap_fetchbody($mb,$i,1,FT_PEEK);//本文取得 $body_sjis=mb_convert_encoding($body,"SJIS","auto");//SJISに変換 echo("$body_sjis<br><br><br>"); echo("[mail_honbunの場合]<br>"); if(preg_match("/次の.+書きなさい。/",$mail_honbun,$temp))//OK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/次の.+正解/",$mail_honbun,$temp))//OK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/エッセンシャル/",$mail_honbun,$temp))//OK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/ダメージ/",$mail_honbun,$temp))//NG 何故ダメージはマッチしない? echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); echo("---------------------------------------<br>"); echo("[body_sjisの場合]<br>"); if(preg_match("/次の.+書きなさい。/",$body_sjis,$temp))//OK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/書き.+正解/",$body_sjis,$temp))//NG 。を超えるとマッチしない echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/エッセンシャル/",$body_sjis,$temp))//OK エッセンシャルはOK echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); if(preg_match("/ダメージ/",$body_sjis,$temp))//NG ダメージがNG、何故? echo("$temp[0]<br>"); else echo("NOT MATCH<br>"); ?> ## 結果 ######################################################## [mail_honbunの場合] 次のことはを感じで、書きなさい。 次のことはを感じで、書きなさい。(すべて)手へんの漢字です。 「正解 エッセンシャル NOT MATCH --------------------------------------- [body_sjisの場合] 次のことはを感じで、書きなさい。 NOT MATCH エッセンシャル NOT MATCH ################################################################# 問題点<$mail_honbun>の場合 マッチするカタカナと、しないカタカナがある事。(エッセンシャルがマッチして、ダメージがマッチしない事) 問題点<$body_sjis>の場合 。を超えるとマッチしない事。 マッチするカタカナと、しないカタカナがある事。(エッセンシャルがマッチして、ダメージがマッチしない事) 自分で何が問題なのか、何を知らないのかがはっきりしません。 文字コードSJISを使わない方がいいのでしょうか? 参考になる事や、調べたら解決しそうなキーワードがあれば教えて下さい。宜しくお願いします。 ファイル"php.ini"の設定 mbstring.language = Japanese mbstring.internal_encoding = SJIS mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII

    • ベストアンサー
    • PHP
  • このコードに間違いはありますか?

    (1)$tempWord = "<"."TABLE".">"; (2)$tempWord+="<set name=\'".$i."\' value=\'".$ic2."\' color=\'AFD8F8\'/>"; (3)$tempWord+="</graph>"; (4)echo "</table>"; これらの代入を(1)が終わったら下の命令、(2)が終わったら下の命令 var_dump($tempWord); echo $tempWord; といった感じで、変数の内容をHTMLに出力しているのですが、 (1)のとき、var_dumpの結果はString(7)=""、echoに至っては何も表示されません。 同様にvar_dumpの結果はバイト数のカウント自体は正常に表示されるのですが、変数の内容については""と表示されるだけです。 一見、コードの間違いを発見できません。 おかしい点があったら教えてください。 これらのコードを実行すると、

    • 締切済み
    • PHP
  • shellで$入り変数に値を代入する方法

    shellで、変数への代入処理で困っています。 下記サンプルソースのように代入する変数自体にfor文で使用している変数が含められるようにしたいのですが、下記の通りだと実行できません。 うまく意図通りに動かす方法はございませんでしょうか? ---------------------------------------------------------------- #!/bin/sh #変数初期化 n00=0 n01=1 n02=2 n03=3 n04=4 #メインルーチン for i in 00 01 02 03 04 ; do temp=`eval echo '$'"n"${i}` #変数値をtempに格納 n${i}=`expr ${temp}+1` #各変数の値を+1する。 n${i}の部分をどのようにすればよいか不明 done ---------------------------------------------------------------- # 望ましい結果 echo ${n00} -> 1 echo ${n01} -> 2 : ※制約事項 ・ shのみ使用可能で、ksh,csh.bashは使用不可 ・ n[0]=0,n[1]=1・・・というように配列の使用は無し

  • 正規表現で記号 & アンドの検索ってサポートされてない?

    preg_matchあるいはereg関数を用いて、 &p=XX (XXは半角数字2桁)のようなパラメーターがURLに含まれるかを調べたいのですが、p=XXまではうまくいくのですが、&p=XXだと マッチしなくなります。 $url = "http://hogehoge.jp/index.php&p=01"; $pattern = "&p=[0-9]{2}"; if (preg_match($pattern, $url)) { echo "ある"; } else { echo "ない"; } ご指導のほど宜しくお願いします。

    • ベストアンサー
    • PHP
  • preg_matchと定数について

    preg_matchと定数について $string = "○○ドメイン"; if (preg_match("/$string/", $_SERVER['SERVER_NAME'])) {  echo "○"; } else {  echo "✕"; とやると○になるのですが、 define("DOMAIN", "○○ドメイン"); if (preg_match("/DOMAIN/", $_SERVER['SERVER_NAME'])) {  echo "○"; } else {  echo "✕"; } とすると、✕になります。 なぜでしょうか?

    • ベストアンサー
    • PHP
  • 正規表現で切り出せません。 < と > の間?

    宜しくお願いいたします。 PHP5.1.6です。 メールの受信をするときにメールアドレスだけを切り出したいのですが うまく出来ません。 【例-1】の様に、すると < > の間が表示するのですが 【例-2】の例のように、変数を入れると何も表示しません。 【例-1】で使用した文字列は、【例-2】の$from を echo で表示させたものをコピーしています どのようにしたらいいでしょうか? 宜しくお願いいたします。 【例-1】 $test="教えてお名前 <****@*******.com>"; $pattern = "<(.*)>"; if (preg_match( "/".$pattern."/i", $test, $match ) ){ //$from0 = $match[0]; $from1 = $match[1]; //echo $from0; echo $from1; } これで、うまく echo $from1 でメールアドレスだけ表示してくれます。 *** なぜか、$from0 には元の文字列は表示しませんが。 置き換える元の文字列を下記変数に変えると表示しません。 【例-2】 $mboxes = imap_check($mbox); $head = imap_header($mbox, $i); $from = htmlspecialchars(mb_decode_mimeheader($head->fromaddress)); $pattern = "<(.*)>"; if (preg_match( "/".$pattern."/i", "$from", $match ) ){ //$from0 = $match[0]; $from1 = $match[1]; //echo $from0; echo $from1; } **$from の所は "" で囲んだり、外したりしましたが一緒でした。

    • ベストアンサー
    • PHP
  • 多次元配列?配列のキー?変数の型?

    PHP勉強中のものです。 予定通りの動作にならんく四苦八苦しています。 どのように修正すれば予定通りになるのか考え方のアドバイスなどお願いします。 処理したいこと 変数$xxxの先頭の文字と最後の文字をsubstr()で取り出し$aaaと$bbbに別けそれぞれ代入しキーとして多次元配列に代入した配列要素を指定してechoで出力したい 試してみたこと $aaa1と$bbb1に直接整数を代入してみたところ、echoで出力された キーになる変数を整数型として変数に代入してみたが希望通りの動作にならなかった。 なにかアドバイス頂けると助かります。 $array = array( "0" =>array("あいうえお","かきくけこ"), "1" =>array("さしすせそ") ); $xxx = "0-1"; $aaa = substr($xxx,0,1); $bbb = substr($xxx,2); $aaa = (int)$aaa; $bbb = (int)$bbb; echo $array[$aaa][$bbb]; //出力されない $aaa1 = 0; $bbb1 = 1; echo $array[$aaa1][$bbb1]; //出力された $aaa = (int)$aaa; $bbb = (int)$bbb; echo $array[$aaa][$bbb]; //出力されない

    • ベストアンサー
    • PHP
  • 3桁コードの先頭文字を取り出す

    お世話になります。 Perlは最近はじめました。ご教授宜しくお願いします。 さて、コード番号が101、102・・・201、202・・・801、802の様にあってリクエストフォームから送信されてきます。これを一旦変数に代入した後、102だったら、先頭の1を、801だったら先頭の8を取り出して、ifで分岐させたいのですが、ExcelなんかでのLeft関数の様に、左から○文字を取り出す・・・という処理はPerlではどうすればよいのでしょうか?

    • ベストアンサー
    • Perl
  • 検索結果の表示件数の制御

    CSVデータから検索キーワードを取得し、マッチしたものを全て表示することはできますが、例えば、検索結果の表示件数を5件ごとに制御(次の5件、前の5件)し、かつテーブルタグで表示する場合に、端数が出た場合(検索結果が38件だった場合に端数の3件は余計なテーブルタグが表示されない)の処理方法にかなり躓いています。 また、次の5件、前の5件のリンク文字も自動で表示したいのですが、参考になるようなサンプルコードやヒントをアドバイス下さい (1)検索キーワード $find にマッチしたものを $line 配列に代入する処理(一部省略) if($find)$result[] = $line; (2)検索結果に対する処理 echo "<div>検索結果</div>".count($result)."件<br />"; for($c = 0; $c < count($result); $c++){ list($data01,$data02,$data03,) = explode(",", $result[$c]); echo $data01; echo $data02; echo $data03; }

    • 締切済み
    • PHP

専門家に質問してみよう