- ベストアンサー
PHPのswitch文で常にdefault処理がされる理由
- PHPのswitch文を使って変数の値に応じて処理を変える方法について質問します。
- 具体的には、文字列を別のファイルから受け取り、switch文で処理する際に、常にdefault処理がされてしまう問題が発生しています。
- 文字列の中身や型に問題はないように思われるので、なぜこのような現象が起こるのか、解決策を教えていただきたいです。
- みんなの回答 (4)
- 専門家の回答
関連するQ&A
- PHPについて質問です。(switch文)
PHPについて質問です。(switch文) 前のフォームのテキストフィールドから受け取った"fn"の値を使ってswhitch文で判定したいです。 <?php $a = $_POST['fn']; switch( $a ){ //←ここが予期せぬエラーとでました。 case 1: echo '$aは1です。'; break; case 2: echo '$aは2です。'; break; case 3: echo '$aは3です。'; break; default: echo '$aは1・2・3のいずれでもありません。'; } ?> どこらへんがいけないのですか?
- ベストアンサー
- PHP
- phpのswitch文
お世話になります。下記のようなフォームがあります。 <form method="post"><input type="submit" value="新規登録" name="registration"><form method="post"><input type="submit" value="一覧" name="list"></form> 新規登録と一覧、2つのボタンがあるのですが押されたボタンによって処理を区別したいです。 データを受け取るPHP内に下記のように記述したのですが思い通りの結果になりません。アドバイスを宜しくお願いします。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <?php switch(ココの記述が判りません){ //新規登録画面を表示 case "registration": print "新規登録!"; break; //一覧を表示 case "'list', )": print "一覧表示"; break; default: print "ココがデフォルト表示"; } ?> ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー if文だとif(isset($_POST["registration"])){の記述で分岐できたのですが、条件分岐が多いのでswitch文で書きたいです。 宜しくお願いします
- ベストアンサー
- PHP
- switch文について
VC++6.0 SDIです。 CString型の変数に、コンボボックスのデータを所得し、 選択したコンボボックスの内容に応じて異なった処理をさせたいのですが、どうしたら良いでしょうか? 私は、下記コードで出来るかな??ってイメージしていたのですが・・。 下記コードを改造してなんとか・・・ という拘り無く、コンボボックスの内容によって違う処理をする分岐の一般的な方法が知りたいと思っています。 よろしくお願い致します。 CString A; GetWindowText(A); switch(A){ case '文字列1':{ 処理 break; } case '文字列2':{ 処理 break; } ・ ・ ・ default :{ 処理 break; } }
- ベストアンサー
- C・C++・C#
- switch文 defaultについて
switch文で曜日を表示するプログラムを作成したいのですが、 任意の月の1日を日曜日とし、入力された日にち(変数date)の曜日を変数dayとしました。 day=(date-1)%7 とし、day=0のとき日曜日、day=1のとき月曜日、・・・、day=6のとき土曜日とします。 dateに0以下の数が入力されたとき、default文で「その月は1日から始まります。」 dateに32以上の数が入力されたとき、default文で「その月は31日までです。」 といったエラーを表示させたいと思います。 1つのswitch文の中に2種類のdefault文をどうやって書いたらいいのかわかりません。 switch文以下のプログラムは、以下のように書いてみました。 day=(date-1)%7; switch(day) { case 0: printf("1月%d日は日曜日です。",date); break; case 1: printf("1月%d日は月曜日です。",date); break; case 2: printf("1月%d日は火曜日です。",date); break; (case 3~case 5も同様に書く。) case 6: printf("1月%d日は土曜日です。",date); break; default: printf("1月は31日までです。"); /*dateに32以上の数が入力された場合のエラー表示*/ break; default: printf("1月は1日から始まります。"); /*dateに0以下の数が入力された場合のエラー表示*/ break; } しかし、1つのswitch文にdefault文は1つしか書けませんよね? 入力された日によってdefault文を使い分けるにはどうしたらよいのでしょうか。
- ベストアンサー
- C・C++・C#
- switch文について
switch文の、switch(a)←このaの部分について分からない事があります。 例) void WRITE(void){ char str; fgets(str,8,stdin); puts(str); swicth(str){ case ??:実行文1;break; case ??:実行文2;break; ・ ↑ ・ default:break; } } としたとき、矢印の「??」の部分には文字列を指定することが可能でしょうか? 例えば、「RX」が入力されたら実行文1、「TX」が入力されたら実行文2・・・というようにしたいのですが、どう指定したらいいのかがわかりません。一文字だけなら「''」で囲むのはわかるのですが、文字列となると・・・ どなたかご教授願えませんでしょうか?
- ベストアンサー
- C・C++・C#
- switch文の中でforeach
switch文の中でforeachをしたいのですが、うまくいきません。 <現状> $x=5; switch( $x ){ case 2: echo $x="JavaScript"; break; case 5: echo $x="PHP"; break; default: echo $x="未分類"; } <やりたいこと>判定データを別で用意して、読み込ませたい $x_master = array( 2 => "JavaScript", 5 => "PHP", ); ■テスト1 $x=5; switch( $x ){ foreach( $x_master as $key => $value ){ case $key: echo $x=$value; break; } default: echo $x="未分類"; } これを試すと、Parse error: syntax error, unexpected T_FOREACH, expecting T_CASE or T_DEFAULT or '}'となります。これは、switchの中でforeachは使えないということでしょうか? ■テスト2 $x=5; foreach( $x_master as $key => $value ){ switch( $x ){ case $key: echo $x=$value; break; default: echo $x="未分類"; } } $x=2;だとJavaScript未分類となるのに、$x=5;だと未分類未分類になります。 $x=2と$x=5で挙動が異なる理由が分かりません。 ■テスト3 $x=5; foreach( $x_master as $key => $value ){ switch( $x ){ case $key: echo $x=$value; break; } } これでようやく望んだ結果が得られたのですが、これでo.k.のなのでしょうか? なんでdefault入れてはダメなのでしょうか? foreachでいくら回しても、該当部分が存在する限り、breakして、defaultへはいかないと思うのですが…。それともforeachの一番最後の終了処理で何かが返ってきて、それが該当項目に存在せず、defaultへ流れる結果となるのでしょうか? そもそも、考え方として、foreachで回している以上、この場合、例外というか、switch文のdefaultに該当する部分は必要ないとの認識でよいでしょうか? 質問内容 ■テスト1が、syntax errorとなる理由 ■テスト2で、$x=2なら$x_masterを読み込むのに、$x=5なら$x_masterを読み込まない理由 ■テスト3のケースは、default部分を本当に書かなくてo.k.でしょうか? またその理由は?
- ベストアンサー
- PHP
- switch文について
下記のようなswitch文に もうひとつの変数 int tmp = Integer.valueOf(変数2).intValue();を代入したいのですが もう一つ代入できるのでしょうか?? 因みにswitch文にIF文を加えて変数を代入するのではなく switch文で複数の変数を使用したいのです。 どうぞよろしくお願いいたします。 なお、質問の意味が分からない、意図が伝わらない方は アドバイスはいりませんので 恐縮ですがアドバイスお願いいたします。 int lot = Integer.valueOf(変数1).intValue(); switch (lot) { case 1: out.print("OK"); break; case 2: out.print("NG"); break; default: out.print("エラー"); break;} }
- ベストアンサー
- Java
- switch の範囲指定
switch文で以下のように書いた時に処理はCを実行するのですが、 変数a が 0~9の時に こうしますよ と範囲がまだ狭い時はこのように書いても処理はできると思いますが 変数a の範囲が 0~99だった場合、いちいちcase を100回書いて(defaultを使えば処理は減るだろうけど) と数字を100回書かないといけないのはとても面倒だと思うのです。 そこで以下のようにifを使わずにswitchを使って範囲を指定する方法はありませんか? //ifを使った場合の範囲指定 if( ( 0 <= a ) && ( a < 25 ) ){ //略 } else if( ( 25 <= a ) && ( a < 50 ) ){ //略 } else if( ( 50 <= a ) && ( a < 75 ) ){ //略 } else if( ( 75 <= a ) && ( a < 100 ) ){ //略 } //ソース int a = 6; switch( a ){ case 0: case 1: //処理A break; case 2: case 3: case 4: //処理B break; case 5: case 6: //処理C break; case 7: case 8: case 9: //処理D break; }
- ベストアンサー
- C・C++・C#
- 文字列を判断して処理をする書き方
2バイトの文字列の中身によって違う処理をするプログラムを作成しています。 数値ならば、 switch(no){ case 10: 処理1 break; case 20 処理2 break; ・ ・ ・ } と書けるのですが、文字列だと if(strncmp(no,"10",2) == 0){ <処理1> }else if(strncmp(no,"20",2) == 0){ <処理2> }else if ・ ・ ・ } というような書き方しか分かりません。数値同様にswitch文できれいに書くような方法はありませんでしょうか? もしくはこうすればスマートに書けるというようなものがあればお教えください。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- switch文を教えてください。
以下のスイッチ文はcounterが特定の時にある値を代入する文ですが、 マッチした時全部同じ処理をしてしまいますよね。 case 50: の時だけ enemy[i].pattern=2; ではなく、 enemy[i].pattern=0; にしたいんです。 どうすればいいでしょうか。 やはりif文を使うしかないのでしょうか? これだけが実現できるとりあえずの処理ではなくて、これからドンドンcase文が増えていくものとして汎用性の高い書き方にしたいです。 switch(counter){ case 50: case 350: case 650: case 950: case 1250: case 1550: case 1850: case 2150: enemy[i].pattern=2; //どういう軌道を描くか enemy[i].flag=1; //出現フラグを立てる enemy[i].counter=0;//カウンター初期化 enemy[i].size=0.5f;//敵の大きさ enemy[i].range=10.0f//範囲 enemy[i].x=210.0; //xの初期座標 enemy[i].y=-10.0; //yの初期座標 break; default: break; } どなたかよろしくお願いします><
- ベストアンサー
- C・C++・C#
お礼
ご回答ありがとうございました。まさにその通りでした。 解決しました。