- ベストアンサー
簡略法について
初歩的な質問します 以下の条件分岐をラジオボタンで選択して代入させています 同じ様な文の繰り返しですので何か代用の文法があるのでは ないかと思いますがご教授お願いいたします。 ---------------------- if ($_POST["wc"]) { //"月" がPOSTされてきたら $c = $_POST["wc"]; //POSTの値を受け取って変数に割り当てる } else { $c = 8; // } if ($_POST["wd"]) { //"火" がPOSTされてきたら $d = $_POST["wd"]; //POSTの値を受け取って変数に割り当てる } else { $d = 8; // } if ($_POST["we"]) { //"水" がPOSTされてきたら $e = $_POST["we"]; //POSTの値を受け取って変数に割り当てる } else { $e = 8; // } if ($_POST["wf"]) { //"木" がPOSTされてきたら $f = $_POST["wf"]; //POSTの値を受け取って変数に割り当てる } else { $f = 8; // } if ($_POST["wg"]) { //"金" がPOSTされてきたら $g = $_POST["wg"]; //POSTの値を受け取って変数に割り当てる } else { $g = 8; // } if ($_POST["wh"]) { //"土" がPOSTされてきたら $h = $_POST["wh"]; //POSTの値を受け取って変数に割り当てる } else { $h = 8; // }
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
回答番号:No.1 継続質問への回答 元のソフトを可能な限り残すと下記になるかな (以下は本来はチェックボックスを使うべきです) --------------------- <input type="radio" name="w[1]" value="1">月 <input type="radio" name="w[2]" value="2">火 <input type="radio" name="w[3]" value="3">水 <input type="radio" name="w[4]" value="4">木 <input type="radio" name="w[5]" value="5">金 <input type="radio" name="w[6]" value="6">土 --------------------- <?php if ($_POST["n"]) { //"年" がPOSTされてきたら $n = $_POST["n"]; //POSTの値を受け取って変数に割り当てる } else { $nen = date("Y"); //今日の"年" $gatsu = date("n"); //今日の"月" } $iro=array('#ff0000','#ffc0cb','#ffc0cb','#ffc0cb','#ffc0cb','#ffc0cb','#b0c4de'); for ($i = $hi; $i < 40; $i++) { $you = date("w", mktime(0, 0, 0, $gatsu, $hi, $nen)); if ($you == 0) { //日曜日なら print "<td align='center'><font color='#ff0000'>$youbi[$you] <BR>" . $hi . "</font><BR> </td>\n"; //文字を赤に } elseif (isset($_POST['w'][$you])) { print "<td align='center' bgcolor='".$iro[$you]."'>$youbi[$you] <BR>" . $hi . "<BR>◎</td>\n"; } else { print "<td align='center'>$youbi[$you] <BR>" . $hi . "<BR> </td>\n"; //平日表示 } $hi++; if (checkdate($gatsu, $hi, $nen) == false) { //+1した日付がありえない日付だったら break; //繰り返し処理を抜ける } } $hi = $hi -1; //行き過ぎた日を1日戻す $you = date("w", mktime(0, 0, 0, $gatsu, $hi, $nen)); ?> さらにこの場合、最初の質問に有ったコードは以下になります(使い道有りませんが) $c=$d=$e=$f=$g=$h=8; foreach($_POST['w'] as $val){ ${chr(0x62+$val)}=$val; }
その他の回答 (4)
- masa6272
- ベストアンサー率66% (93/140)
checkboxで値を持ってきて、$dwに入れます。 $cとか、$dって別の変数にしないで、配列の方が使いやすいでしょう。繰返しで処理できますから。 月曜から、土曜までですね。 8と言うのが良く分かりませんが・・・ $x = array_fill(0, 6, 8); for($i = 0; $i < count($dw); i++) { $x[$dw[$i] - 1] = $dw[$i]; } こんな形ですかね。
補足
ご回答ありがとうございます。 補足ですが、曜日の選択ですが下記の$youで0~6が曜日に当てられます。 value="1"/>月 ・・・ value="6"/>土 value="0"/>日 $you = date("w", mktime(0, 0, 0, $gatsu, $hi, $nen)); //曜日 if ($you == 0) { //日曜日なら print "<td align='center'><font color='#ff0000'>$youbi[$you] <BR>" . $hi . "</font><BR> </td>\n"; //文字を赤に } elseif ($you == $c) { //月曜日なら print "<td align='center' bgcolor='#ffc0cb'>$youbi[$you] <BR>" . $hi . "<BR>◎</td>\n"; //背景を pink に } ・・・ で1週間の曜日の条件を選択し表示させたいのです。 どうも上手く説明できずご不便おかけします。
- masa6272
- ベストアンサー率66% (93/140)
radioは、複数の候補から、1つだけ選ぶのに使います。 たとえば、曜日を1つだけ選ぶのでしたら、 <input type="radio" name="dayOfWeek" value="1" />月 <input type="radio" name="dayOfWeek" value="2" />火 <input type="radio" name="dayOfWeek" value="3" />水 <input type="radio" name="dayOfWeek" value="4" />木 <input type="radio" name="dayOfWeek" value="5" />金 <input type="radio" name="dayOfWeek" value="6" />土 <input type="radio" name="dayOfWeek" value="7" />日 のように、同じ名前を付けます。 どれか、1つしか、選択できません。 複数選択するときは、通常checkboxを使います。 radioでは、一度選択すると外すことはできません。 checkBoxは、違う名前を付けることもできますが、PHPでしたら、配列名を付けると、使いやすいかもしれません。 <input type="checkbox" name="dayOfWeek[]" value="1"/>月 <input type="checkbox" name="dayOfWeek[]" value="2"/>火 <input type="checkbox" name="dayOfWeek[]" value="3"/>水 <input type="checkbox" name="dayOfWeek[]" value="4"/>木 <input type="checkbox" name="dayOfWeek[]" value="5"/>金 <input type="checkbox" name="dayOfWeek[]" value="6"/>土 <input type="checkbox" name="dayOfWeek[]" value="7"/>日 こうすると、 $dw = $_POST["dayOfWeek"]; とすれば、 $dwにチェックされたところのvalueが入ります。
お礼
ご回答ありがとうございました。 $cに8または1 同じく $dに8または2 ・・・ (188888)月曜日選択 (188886)月と土選択 といった繰り返しの代入がしたいのですが >$dw = $_POST["dayOfWeek"]; >とすれば、 >$dwにチェックされたところのvalueが入ります。 の後が私には展開できません。
- masa6272
- ベストアンサー率66% (93/140)
HTML側のラジオボタンは、どうなっているんでしょう? 今一、質問の意味が分かりません。 たとえば、wという名前のラジオボタンでしたら、すべて$_POST['w']で受け取って、値が異なるだけと思うのですが。
お礼
ご回答ありがとうございました 質問もうまく表現できずもうしわけございません
- mpx
- ベストアンサー率71% (149/209)
こんな感じでも同じ処理になるでしょう。 for($i=0;$i<6;$i++){ $w=substr("cdefgh",$i,1); if ($_POST["w".$w]) { ${$w}=$_POST["w".$w]; } else { ${$w}=8; } } あるいは、以下のような方法も $c=$d=$e=$f=$g=$h=8; foreach($_POST as $key=>$val){ if (preg_match("/^w([cdefgh])$/",$key,$match)) ${$match[1]}=$val; } 本来ならもっと受信側で処理しやすい form を組むべきでしょうね。
補足
mpx様 ご回答ありがとうございました。 見本の2件とも代用でき文が簡略されました。 次の段階で本来は以下の条件を満たしたいために苦慮しておりますが こちらも同じように簡略できるのではないかと素人考えですが、 どういった文法を使えば良いのでしょうか? もしよろしければご教授お願い申し上げます。 --------------------- <input type="radio" name="wc" value="1">月 <input type="radio" name="wd" value="2">火 <input type="radio" name="we" value="3">水 <input type="radio" name="wf" value="4">木 <input type="radio" name="wg" value="5">金 <input type="radio" name="wh" value="6">土 --------------------- <?php if ($_POST["n"]) { //"年" がPOSTされてきたら $n = $_POST["n"]; //POSTの値を受け取って変数に割り当てる } else { $nen = date("Y"); //今日の"年" $gatsu = date("n"); //今日の"月" } $c=$d=$e=$f=$g=$h=8; foreach($_POST as $key=>$val){ if (preg_match("/^w([cdefgh])$/",$key,$match)) ${$match[1]}=$val; } for ($i = $hi; $i < 40; $i++) { //日付に1を足しながら40日まで繰り返し $you = date("w", mktime(0, 0, 0, $gatsu, $hi, $nen)); //曜日 if ($you == 0) { //日曜日なら print "<td align='center'><font color='#ff0000'>$youbi[$you] <BR>" . $hi . "</font><BR> </td>\n"; //文字を赤に } elseif ($you == $c) { //月曜日なら print "<td align='center' bgcolor='#ffc0cb'>$youbi[$you] <BR>" . $hi . "<BR>◎</td>\n"; //背景を pink に } elseif ($you == $d) { //火曜日なら print "<td align='center' bgcolor='#ffc0cb'>$youbi[$you] <BR>" . $hi . "<BR>◎</td>\n"; //背景を pink に } elseif ($you == $e) { //水曜日なら print "<td align='center' bgcolor='#ffc0cb'>$youbi[$you] <BR>" . $hi . "<BR>◎</td>\n"; //背景を pink に } elseif ($you == $f) { //木曜日なら print "<td align='center' bgcolor='#ffc0cb'>$youbi[$you] <BR>" . $hi . "<BR>◎</td>\n"; //背景を pink に } elseif ($you == $g) { //金曜日なら print "<td align='center' bgcolor='#ffc0cb'>$youbi[$you] <BR>" . $hi . "<BR>◎</td>\n"; //背景を pink に } elseif ($you == $h) { //土曜日なら print "<td align='center' bgcolor='#ffc0cb'>$youbi[$you] <BR>" . $hi . "<BR>◎</td>\n"; //背景を lightsteelblue に } else { print "<td align='center'>$youbi[$you] <BR>" . $hi . "<BR> </td>\n"; //平日表示 } $hi++; if (checkdate($gatsu, $hi, $nen) == false) { //+1した日付がありえない日付だったら break; //繰り返し処理を抜ける } } $hi = $hi -1; //行き過ぎた日を1日戻す $you = date("w", mktime(0, 0, 0, $gatsu, $hi, $nen)); ?> ---------------------
お礼
ご回答ありがとうございました。 (isset($_POST['w'][$you]) bgcolor='".$iro[$you]."'>$youbi[$you] なるほどと感心しつつ、関数の奥深さが解りました。 本を何冊か買って読んでみましたがどこに応用できるのかなかなか理解できませんでしたが、これですっきりしました! ありがとうございました。