• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:if文のもっとスマートな書き方)

効率的なIF文の書き方のご教授お願いします

このQ&Aのポイント
  • IF文を効率的に書く方法を教えてください。
  • 長いIF文をよりシンプルかつスマートに書く方法を教えてください。
  • IF文のコードを短くするためのテクニックを教えてください。

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

  • ベストアンサー
  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.3

$names = array('6メートル'=>'a','10メートル'=>'b'); $kingaku = ${$names[$name].(int)$keta}; で一応…。 ただ、全体がどのようなデータ構造になっているか分かりませんが、連想配列を使用した方が分かりやすいのでは? $products['6メートル'] = array('10'=>1200, '15'=>1800, '20'=>2100,~); のようにしておけば、ifでひとつひとつ回さなくても、 $products[$name][$keta] のようにして取得できます。(表のイメージです) また、ほんとに量が多いようなら別途csvファイルにして配列に取り込むとか(あるいはSQL)の方がよろしいかと。

その他の回答 (3)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.4

お遊びレベルでよければこんな書き方もあります $kingaku="-"; if(in_array($name,array("6メートル","10メートル"))){ for($i=10;$i<=50;$i+=5){ if($keta ===$i."メートル") $kingaku=${($name==="6メートル"?"a":"b").$i}; } } ただし、命題では$name =="10メートル"の表記の十のケタが全角になっているので そのままではうまくいきません。

harrygogo
質問者

お礼

ありがとうございました! とても参考になりました 

noname#219209
noname#219209
回答No.2

こんにちわ。 関数とハッシュを使ってみてはどうでしょう ------------------------------------------------------- $kingaku="-"; if ($name =="6メートル") { $kingaku = func_hoge(1,$keta); }elseif($name =="10メートル"){ $kingaku = func_hoge(2,$keta); } function func_hoge ($kbn,$keta) { $a = array ( "10メートル" => $a10, "15メートル" => $a15, "20メートル" => $a20, "25メートル" => $a25, "30メートル" => $a30, "35メートル" => $a35, "40メートル" => $a40, "45メートル" => $a45, "50メートル" => $a50 ); $b = array ( "10メートル" => $b10, "15メートル" => $b15, "20メートル" => $b20, "25メートル" => $b25, "30メートル" => $b30, "35メートル" => $b35, "40メートル" => $b40, "45メートル" => $b45, "50メートル" => $b50 ); $rtn = ($kbn == 1) ? $a[$keta] : $b[$keta]; if (empty($rtn)) return '-'; return $rtn; }

harrygogo
質問者

お礼

ありがとうございました。 もう少し短く出来ればな~っと思いましたが、勉強になりました!

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

配列にしてしまった方があとあとのことを考えても楽だと思う。 $names = array("6メートル", "10メートル"); $ketas = array("10メートル", "15メートル", "20メートル", "25メートル", "30メートル", "35メートル", "40メートル", "45メートル", "50メートル"); $values = array(array($a10, $a15, $a20, $a25, $a30, $a35, $a40, $a45, $a50), array($b10, $b15, $b20, $b25, $b30, $b35, $b40, $b45, $b50)); $kingaku = "-"; $key1 = array_search($name, $names); $key2 = array_search($keta, $ketas); if ($key1 and $key2) { $kingaku = $values[$key1][$key2];

harrygogo
質問者

お礼

ありがとうございました! 勉強になりました!

関連するQ&A