公式アカウントからの投稿が始まります

お分かりになられる方ご教授ください

下記のような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="-";

}

とにかく長いです。。。
これをもっとスマートに書く方法はございますでしょうか?

恐れ入りますがお分かりになられる方教えて下さい

A 回答 (4件)

$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)の方がよろしいかと。
    • good
    • 0

お遊びレベルでよければこんな書き方もあります



$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メートル"の表記の十のケタが全角になっているので
そのままではうまくいきません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/04/20 17:51

こんにちわ。


関数とハッシュを使ってみてはどうでしょう
-------------------------------------------------------
$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;
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/04/20 17:52

配列にしてしまった方があとあとのことを考えても楽だと思う。



$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];
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/04/20 17:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!