2つのドロップダウンメニューから選択された値に応じて、設定項目の引数を変更したいです。
下の例では、それをするのに15回IF分岐しちゃってますが、もっといい方法はないでしょうか。
PHP4+JpGraphでグラフ(散布図)を描かせているのですが、
目盛りの間隔(細かさを)まばら、少、多、自動の4段階で切り替えてます。
<html>
<body>
Y軸の目盛間隔
<select name="axis_x">
<option value="0" selected>自動</option>
<option value="1">まばら</option>
<option value="2">少</option>
<option value="3">多</option>
</select>
Y軸目盛間隔
<select name="axis_y">
<option value="0" selected>自動</option>
<option value="1">まばら</option>
<option value="2">少</option>
<option value="3">多</option>
</select>
</body>
</html>
if ($axis_y =='0' and $axis_x == '1'){
$graph->SetTickDensity(TICKD_NORMAL,TICKD_VERYSPARSE);
} elseif ($axis_y =='0' and $axis_x == '2'){
$graph->SetTickDensity(TICKD_NORMAL,TICKD_SPARSE);
:
■12セットのelseif文省略←ここが非効率!
:
} elseif ($axis_y =='3' and $axis_x == '3'){
$graph->SetTickDensity(TICKD_DENSE,TICKD_DENSE);
}
No.2ベストアンサー
- 回答日時:
効率がいいか分かりませんが、配列はどうでしょうか。
種類が増えたら配列に追加すれば対応できます。
if文を追加する必要がないので保守性がアップするかもしれません。
$tickd_x = array("TICKD_NORMAL", "TICKD_VERYSPARSE", "TICKD_SPARSE", "TICKD_DENSE");
$tickd_y = array("TICKD_NORMAL", "TICKD_VERYSPARSE", "TICKD_SPARSE", "TICKD_DENSE");
// 範囲外の値ならグラフを生成させないための処理
if((isset($tickd_x[$axis_x])) && (isset($tickd_y[$axis_y]))) {
$graph->SetTickDensity($tickd_y[$axis_y],$tickd_x[$axis_x]);
}
papillon68さん、アドバイスありがとうございました。
配列というのはこんな使い方もできるのですね。
いろいろ構文はあるもののなかなか使い倒せなくて
技術アップできていなかったところです。
例外処理の方法までご提示いただき、感謝です。
No.5
- 回答日時:
普通この手の処理は配列でやりませんか?
(こまかく検証していないので、書式は
間違っているかもしれませんが)
<?php
$tickd_x[0]="TICKD_NORMAL";
$tickd_x[1]="TICKD_VERYSPARSE";
$tickd_x[2]="TICKD_SPARSE";
$tickd_x[3]="TICKD_DENSE";
$tickd_y[0] ="TICKD_NORMAL";
$tickd_y[1] ="TICKD_VERYSPARSE";
$tickd_y[2] ="TICKD_SPARSE";
$tickd_y[3] ="TICKD_DENSE";
$graph->SetTickDensity($tickd_y[$axis_y ],$tickd_x[$axis_x]);
?>
yambejpさん、レスありがとうございました。
配列といっても、#2さんとは記述が異なる
アプローチですね。これまた、シンプルで
頭で理解はできるのですが
まったく発想にありませんでした。
それと$tickd_y[$axis_y ]というのは連想配列という
記述になるんでしょうかね。
ともかく、ありがとうございました。
No.4
- 回答日時:
視認性重視でswitch文にする手はありますね。
switch($axis_x){
case '0':
$tickd_x = "TICKD_NORMAL";
break;
case '1':
$tickd_x = "TICKD_VERYSPARSE";
break;
case '2':
$tickd_x = "TICKD_SPARSE";
break;
case '3':
$tickd_x = "TICKD_DENSE";
break;
default:
echo '<p>エラー: axis_x の値が不正です</p>';
}
switch($axis_x) の値は $_POST['axis_x'] or $_GET['axis_x'] にしても良さそうですが、その辺はお好みで。
aqucentさん、レスありがとうございました。
例文までご提示いただきありがとうございました。
たしかにSWITCHというのも、可能ではあるのですね。
SWITCH ...BREAK構文の存在は知ってましたが
実際に導入したことはなかったです。
確かに、可視性はSWITCH文の方が良いですね、
大変参考になりました。
ちなみに、ご示唆されているように、$axis_xは
$_POST['axis_x'] でないと動かないと思われます。
本番環境ではGlobalがOFFですので。。。
No.3
- 回答日時:
TICKD_VERYSPARSEとかっていう文字が何なのか分かりませんが、
<option>タグのvalueに直接それが入っていれば判定すら要りませんね。
TICKD_VERYSPARSEが定義名であった場合でも、<option>タグに定数値を入れておけば
同様に判定は不要です。
naktakさん、レスありがとうございました。
これは、超コロンブスの卵でした。
ある意味、衝撃的です。
まったくおっしゃるとおりですね。
ちなみに、TICKD_VERYSPARSEは、JpGraphモジュール
が出力するグラフ設定で
メモリの細かさが「非常にまばら」のような
設定値です。
No.1
- 回答日時:
<?php
//すみません、元質問者です。
//投稿後にすごいことを思いつきました。
//↓↓↓これで良かったですね(寒)。
//でも、まだ効率良い方法あったら是非教えてください。
if ($axis_x = '0') {
$tickd_x = "TICKD_NORMAL";
}elseif ($axis_x = '1') {
$tickd_x = "TICKD_VERYSPARSE";
}elseif ($axis_x = '2') {
$tickd_x = "TICKD_SPARSE";
}elseif ($axis_x = '3') {
$tickd_x = "TICKD_DENSE";
}
if ($axis_y = '0') {
$tickd_y = "TICKD_NORMAL";
}elseif ($axis_y = '1') {
$tickd_y = "TICKD_VERYSPARSE";
}elseif ($axis_y = '2') {
$tickd_y = "TICKD_SPARSE";
}elseif ($axis_y = '3') {
$tickd_y = "TICKD_DENSE";
}
$graph->SetTickDensity($tickd_y,$tickd_x);
?>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript JavascriptからSQLへ繋ぎ方が分からない 3 2022/07/07 00:27
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript 中百舌鳥駅と深井駅を入れ替えて選択しても同じ挙動にしたいです。 2 2022/06/24 18:45
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript 1度きりではなく、繰り返し、挙動が変わるようにしていただきたいです。 1 2022/07/03 15:50
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
連動させたいセレクトボックス...
-
複数 selectフォームから今回on...
-
プルダウンとCSVの連動
-
HTML_QuickFormのチェックボッ...
-
PHP セレクトボックスの値 GET...
-
プルダウンで選択された値を保持
-
GET又はPOSTで受け取るデータに...
-
phpのプルダウンメニューで選ん...
-
phpでのselect値の取得・表記に...
-
【PHP&JavaScript】複数の別ウ...
-
ラジオボタンの値を受け取ってP...
-
2つのプルダウンメニュから受け...
-
php セレクトボックス 値取得
-
phpで重複チェック
-
HTMLで前の画面に戻る時、入力...
-
<input type="hidden" >で配列...
-
フォームへの前回入力値をクリ...
-
laravelを利用してコントロール...
-
Javascript→PHPに...
-
phpでチェックボックスでの値の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンとCSVの連動
-
「"」(ダブルクォーテーション)...
-
ラジオボタンの値を受け取ってP...
-
<select>文、foreachと初期値設定
-
phpでのセレクトボックスの値を...
-
php セレクトボックス 値取得
-
複数のセレクトボックスを1つに...
-
複数 selectフォームから今回on...
-
2つのプルダウンメニュから受け...
-
phpでのselect値の取得・表記に...
-
foreachで次の行の値を取得して...
-
ウェブ上で選択した複数行の内...
-
CodeIgniter/set_value()
-
ループ処理
-
連動させたいセレクトボックス...
-
現在時刻を反映させた時刻のプ...
-
プルダウンリスト(コンボボッ...
-
PHP で画面の一部だけを変えたい。
-
phpでカレンダー作成
-
プルダウンで選択された値を保持
おすすめ情報