• ベストアンサー

【続】 【初歩】 5つのIF文を1つにまとめたいのですが

papillon68の回答

回答No.2

こういった場合は配列を使うことも1つの手です。 // 【<input name="var[]" type="text">】 // △という書き方をすると添え字0から // 自動で1、2・・・と添え字が与えられます。 // 【<input name="var[aaa]" type="text">】 // として連想配列とすることもできます。 // 以下では添え字を自前で指定した場合です。 <input name="var[1]" type="text"> ・ ・ ・ <input name="var[5]" type="text"> というフォームからサブミットすると受取り側では 配列$varの添え字1~5にデータが格納されています。 ▽受取り側の処理 ------------------------------------------------ $var = $_POST["var"]; $errMsg = array(); for($i=1;$i<=5;$i++) { if($var[$i]=="") { $errMsg[$i] = "未入力"; } } // こちらでも可(テキストのvarが可変の場合) // 1,3,4などトビトビであったり、 // 1~5の場合や1~9など処理により可変になる場合、 // 配列の要素分だけ繰り返しを行ってくれます。 // ※ただし、$varが配列でなければエラーが発生するため // 【if(is_array($var))】などで条件判断した方がよいです。 //foreach($var as $key => $value) { // if($value=="") { // $errMsg[$key] = "未入力"; // } //} ------------------------------------------------ こういった場合は配列を用いることでソースを見たときに すっきりしますので、他の人【保守面など】が見たときも 理解し易いソースになると思います。

litton101
質問者

お礼

papillon68さん,貴重なご助言ありがとうございました. 配列というのが敷居が高くてなかなか使いこなせずにいますが きれいにまとめていただいて,理解が深まりました. なるほど,,,こういう解法もあるんですねえ・・・ 本当にありがとうございました.

関連するQ&A

  • 変数名を変数で指定するのに$_POST[

    http://oshiete1.goo.ne.jp/qa2691790.html の#1さんに,変数名を変数で指定できることを教わりました. 下記の3行目のように,です. for ($i=1;$i<=5;++$i){ if (${"var".$i}=="") { ${"errMsg".$i}=$i."が未入力"; } } ここで, (1) $_POST["form"] には「str」という文字列が入っています. (2) $Var には「10」という数値が入っています. (3) これらを結合し, どうしても $_POST["str10"] みたいな変数を作らなければならないのですが, ・<? echo $_POST["str" . $Var]; ?>では何も起こらず. ・<? echo $_POST[{"str" . $Var}]; ?>などと{}で括っても, Parse error: parse error, unexpected '{', expecting ']' in C:\temp.php on line 10. みたいなエラーになります. どういうのが正しい書き方でしょうか?

    • 締切済み
    • PHP
  • 条件分岐(IF文)の簡素化

    javascript初心者です。 下記のように7つの変数を利用した組み合わせで、表示内容を変えるjavascriptを組んでいます。 IF文で組んでみたところ、下記のように18通りのIF文になってしまいました。 このjavascriptについては、変数を変えて1ページに10ケ所に配置するため、クライアントマシンは、180通りのIF文計算をすることになるため、簡素化したいと考えています。 switch文だと条件分岐を簡素化出来そうですが、例文では、変数がひとつの場合の例しか載っておらず、複数の場合の記載例がありませんでした。 もっと効率的な方法があると思うため、IF文に限らず良い方法をご指導頂きたくお願いする次第です。 宜しくお願い致します。 var a1 var a2 var a3 var a4 var a5 var a6 var a7 if (a1=="") { document.write("1の作業"); } else if (a2<a3*50) { document.write("2の作業"); } else if ((a2<a3*50) && (a4>=1000) && (a5<=1000) && (a6>=300) && a7="") ) { document.write("2の作業"); } else if ((a2<a3*50) && (a4>=1000) && (a5<=1000) && (a6<299) && a7="") ) { document.write("3の作業"); } else if ((a2<a3*50) && (a4>=1000) && (a5>1000) && (a6>=300) && a7="") ) { document.write("4の作業"); } else if ((a2<a3*50) && (a4>=1000) && (a5>1000) && (a6<299) && a7="") ) { document.write("5の作業"); } else if ((a2<a3*50) && (a4<1000) && (a5<=1000) && (a6>=300) && a7="") ) { document.write("6の作業"); } else if ((a2<a3*50) && (a4<1000) && (a5<=1000) && (a6<299) && a7="") ) { document.write("7の作業"); } else if ((a2<a3*50) && (a4<1000) && (a5>1000) && (a6>=300) && a7="") ) { document.write("8の作業"); } else if ((a2<a3*50) && (a4<1000) && (a5>1000) && (a6<299) && a7="") ) { document.write("9の作業"); } else if ((a2<a3*50) && (a4>=1000) && (a5<=1000) && (a6>=300) && a7="1") ) { document.write("10の作業"); } else if ((a2<a3*50) && (a4>=1000) && (a5<=1000) && (a6<299) && a7="1") ) { document.write("11の作業"); } else if ((a2<a3*50) && (a4>=1000) && (a5>1000) && (a6>=300) && a7="1") ) { document.write("12の作業"); } else if ((a2<a3*50) && (a4>=1000) && (a5>1000) && (a6<299) && a7="1") ) { document.write("13の作業"); } else if ((a2<a3*50) && (a4<1000) && (a5<=1000) && (a6>=300) && a7="1") ) { document.write("14の作業"); } else if ((a2<a3*50) && (a4<1000) && (a5<=1000) && (a6<299) && a7="1") ) { document.write("15の作業"); } else if ((a2<a3*50) && (a4<1000) && (a5>1000) && (a6>=300) && a7="1") ) { document.write("16の作業"); } else if ((a2<a3*50) && (a4<1000) && (a5>1000) && (a6<299) && a7="1") ) { document.write("17の作業"); } else { document.write("18の作業"); }

  • 初歩的なIF文がわかりません

    COBOLでプログラミングをしているのですが 参考書を見ても理解できない部分があります。 IF 条件式-1    処理A    IF 条件式-2       処理B    ELSE       処理C(1)    END-IF ELSE    処理C(2) END-IF. という処理をしたいのですが、 処理C(1)と処理C(2)は全く同じ処理なのですが 同じことを2度書くのではなく 処理C(1)に当てはまる場合は処理C(2)をしてほしいのです。 どのように書けば教えてください

  • 【初歩】 5つのIF文を1つにまとめたいのですが

    初歩的な質問ですが テキストフィールド<input type="text"> が5つあって,未入力だった場合に 個別に未入力を示すメッセージを出す場合,以下はもっと短くかけませんか. if ($var1 == "") { $errMsg1="1が未入力" } if ($var2 == "") { $errMsg2="2が未入力" } if ($var3 == "") { $errMsg3="3が未入力" } if ($var4 == "") { $errMsg4="4が未入力" } if ($var5 == "") { $errMsg5="5が未入力" } 例えば,以下のような横着はできるのでしょうが, if ($var1 == "" or $var2 == "" or $var3 == "" or $var4 == "" or $var5 == "") { $errMsg="1~5のどこかが未入力" } ここでは,「1~5のどこかが」でなく 「1が」「2が」「3が」「4が」「5が・・・」と,個別に変えたいのです.

    • ベストアンサー
    • PHP
  • BLプレートをモダンプレートに変えたいが高さがあわない

    部屋の電気スイッチやコンセントスイッチについているのがBLプレートです。汚れているので交換しようと思いホームセンターへいきました。モダンプレートというのを購入してつけたのですが、スイッチが数ミリ沈んでいます。高さを合わせることはできるのでしょうか?それともBLプレートを買わなくてはいけないのでしょうか?教えてください。 http://oshiete1.goo.ne.jp/qa2644858.html で質問された方と同じことなのだと思いますが解決策はありませんでした。

  • dosのfor構文の意味について

    昨日に異なる階層も含めたファイルの一覧表示のやり方について質問させて頂きました。(http://oshiete1.goo.ne.jp/qa4360685.html) その中で以下のコマンドだと目的の一覧が出力できたのですが、初心者のため構文の意味が分かりませんでした。 c:\>for /r c:\folder1 %i in (*.csv) do @echo %~nxi >> list.txt 質問事項といたしましては大きく2点です。 1.for文の構文である「%変数」の変数とは何なのか http://itpro.nikkeibp.co.jp/article/Windows/20051006/222331/ FOR %変数 IN (ファイル名セット) DO コマンド [コマンドパラメータ] 2.一覧表示に使ったコマンドの意味(具体的にはそれぞれの単語(/r,%i,@echo,%~nxi)))です 回答よろしくお願いいたします。

  • IF文の初歩的質問

    フリーのショッピングカートに送料を足したいのですが、 合計額5,000円以上なら無料,そうでなければ500円と表示できません。perlはほとんど使っていないのでここでつまづいています。 if ($goukei2 > 5000 ) { print "無料\n"; } else { print "500円\n"; }

    • ベストアンサー
    • Perl
  • if文の初歩的な質問

    if文の初歩的な質問なのですが、 if (a==1) c=10; else if (a==2) c=20; else if (a==3) c=30; System.out.println(c); この文のelseはなぜいるのでしょうか?どちらでも良いのでしょうか? 基本のルールとしては、elseが付くのでしょうか?

    • ベストアンサー
    • Java
  • C言語のif文について(初歩の初歩の初歩)

    if(num % 2) とするときnumが2で割り切れ「ない」とき つまり()内が「偽」であるときputsの文が表示されます。 if(num == 0) とするときnumが0のとき つまり()内が「真」であるときputsの文が表示されます。 ()内が非0になるか0になるかというのはわかるのですが 「真」か「偽」かでみると逆になってしまってわかりにくいので 常に if(num != 0) として0じゃ「ない」とき つまり()内が「偽」であるときputsの文を表示させれば 常に()内が「偽」のとき表示されるのでわかりやすいと思ったのですが この先これでやっていくとうまく行かないことが出てきますでしょうか。 簡単なうちに慣れていますべきでしょうか。 それともこのようにやっても問題ないのでしょうか。 皆様はどのようにしているのか教えてください。 よろしくおねがいします。

  • VC++でif文が処理されません

    万年カレンダーを作っていて、先日こちらで日付の取得方法を質問して解決法を教えていただき、その後制作を進めていました。 が、今度はコンパイルは成功しても一部コードが処理されずに行き詰ってしまいました。 以下のようにlabel2に日付を表示させるコードを書いてみたのですが、/*日付の表示*/の if(wd%7 == 0){ label2->Text = Cal + "\r\n"; } が読み込まれていないようで、改行されません。 試しに"\r\n"ではなく別の文字列を入れてみたり、if(wd == 6)に換えてみたりしました。 が、どちらも成果はありませんでした。 どこかおかしい部分があるのでしょうか? コンパイルは成功するので、構文としては間違っていないと思います。 無駄に長いコードになってしまっているかも知れませんが、よろしくお願いします。 <↓ここからソースです> private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { DateTime d1 = DateTime::Now; textBox1->Text = d1.ToString("yyyy"); textBox2->Text = d1.ToString("MM"); int year,month,day ; /* 年 月 日 */ int wd; /* 曜日 */ int dm ; /* 月の日数 */ int L0 ; /* カウンタ */ String^ Cal = ""; /*年・月・日を代入*/ year = System::Int32::Parse( d1.ToString("yyyy") ); month = System::Int32::Parse( d1.ToString("MM") ); day = System::Int32::Parse( d1.ToString("dd") ); /*現在の年・月が何日あるか*/ switch(month) { case 2: if ( year%4 == 0 && (year%100 != 0 || year%400 ==0)){ dm = 29 ; /* うるう年 */ } else { dm = 28 ; break ; } case 4: case 6: case 9: case 11: dm = 30 ; break ; default: dm = 31 ; break ; } /* 今年・今月1日の曜日を求める */ if (month == 1 || month == 2) { year-- ; month += 12 ; } wd = (year + year/4 - year/100 + year/400 + (13*month+8)/5 +1) % 7 ; /* スペースの表示 */ for (L0=0;L0<wd;L0++) { label2->Text = Cal + " "; Cal = label2->Text; } /* 日付の表示 */ for(L0=1;L0<=dm;L0++){ if(wd == 6){ label2->Text = Cal + "\r\n"; } label2->Text = Cal + L0; Cal = label2->Text; wd = wd + 1; } label1->Text = "日  月  火  水  木  金  土" + "\r\n"; }