質問: if文のもっとスマートな書き方 お分かりになられる方ご教授ください 下記のようなif文を書きました if ($name =="6メートル" and $keta =="10メートル") { $kingaku=$a10; }elseif ($name =="6メートル" and $keta =="15メートル") { $kingaku=$a15; }elseif ($name =="6メートル" and $keta =="20メートル") { $kingaku=$a20; }elseif ($name =="6メートル" and $keta =="25メートル") { $kingaku=$a25; }elseif ($name =="6メートル" and $keta =="30メートル") { $kingaku=$a30; }elseif ($name =="6メートル" and $keta =="35メートル") { $kingaku=$a35; }elseif ($name =="6メートル" and $keta =="40メートル") { $kingaku=$a40; }elseif ($name =="6メートル" and $keta =="45メートル") { $kingaku=$a45; }elseif ($name =="6メートル" and $keta =="50メートル") { $kingaku=$a50; } }elseif ($name =="10メートル" and $keta =="10メートル") { $kingaku=$b10; } }elseif ($name =="10メートル" and $keta =="15メートル") { $kingaku=$b15; } }elseif ($name =="10メートル" and $keta =="20メートル") { $kingaku=$b20; } }elseif ($name =="10メートル" and $keta =="25メートル") { $kingaku=$b25; } }elseif ($name =="10メートル" and $keta =="30メートル") { $kingaku=$b30; } }elseif ($name =="10メートル" and $keta =="35メートル") { $kingaku=$b35; } }elseif ($name =="10メートル" and $keta =="40メートル") { $kingaku=$b40; } }elseif ($name =="10メートル" and $keta =="45メートル") { $kingaku=$b45; } }elseif ($name =="10メートル" and $keta =="50メートル") { $kingaku=$b50; } else { $kingaku="-"; } とにかく長いです。。。 これをもっとスマートに書く方法はございますでしょうか? 恐れ入りますがお分かりになられる方教えて下さい
回答: $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)の方がよろしいかと。