アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもお世話になります。
下記のようにIF入れ子で分岐をして3×3×3で27通りの処理をさせたいのですが、もっとシンプルに記述方法があれば御指導お願い致します。

if($asa_ch==1 and $asa_ch_ok ==1){
 if($hiru_ch==1 and $hiru_ch_ok == 1){
  if($yoru_ch ==1 and $hiru_ch_ok ==1){
$flag = 1;
  }elseif($yoru_ch ==2 and $hiru_ch_ok ==1){
$flag = 2;
  }elseif($yoru_ch ==3 and $hiru_ch_ok ==1){
$flag = 3;
  }
 }elseif($hiru_ch==2 and $hiru_ch_ok == 1){
  if($yoru_ch ==1 and $hiru_ch_ok ==1){
      $flag = 4;
  }elseif($yoru_ch ==2 and $hiru_ch_ok ==1){
$flag = 5;
  }elseif($yoru_ch ==3 and $hiru_ch_ok ==1){
$flag = 6;
  }
 }elseif($hiru_ch==3 and $hiru_ch_ok == 1){
  if($yoru_ch ==1 and $hiru_ch_ok ==1){
$flag = 7;
  }elseif($yoru_ch ==2 and $hiru_ch_ok ==1){
$flag = 8;
  }elseif($yoru_ch ==3 and $hiru_ch_ok ==1){
$flag = 9;
  }
}elseif($asa_ch==2 and $asa_ch_ok ==1){
 if($hiru_ch==1 and $hiru_ch_ok == 1){
  if($yoru_ch ==1 and $hiru_ch_ok ==1){
     $flag = 10;
  }elseif($yoru_ch ==2 and $hiru_ch_ok ==1){
$flag = 11;
  }elseif($yoru_ch ==3 and $hiru_ch_ok ==1){
$flag = 12;
  }
 }elseif($hiru_ch==2 and $hiru_ch_ok == 1){
  if($yoru_ch ==1 and $hiru_ch_ok ==1){
$flag = 13;
  }elseif($yoru_ch ==2 and $hiru_ch_ok ==1){
$flag = 14;
  }elseif($yoru_ch ==3 and $hiru_ch_ok ==1){
$flag = 15;
  }
 }elseif($hiru_ch==3 and $hiru_ch_ok == 1){
  if($yoru_ch ==1 and $hiru_ch_ok ==1){
     $flag = 16;
  }elseif($yoru_ch ==2 and $hiru_ch_ok ==1){
$flag = 17;
  }elseif($yoru_ch ==3 and $hiru_ch_ok ==1){
$flag = 18;
  }
}elseif($asa_ch==3 and $asa_ch_ok ==1){
 if($hiru_ch==1 and $hiru_ch_ok == 1){
  if($yoru_ch ==1 and $hiru_ch_ok ==1){
$flag = 19;
  }elseif($yoru_ch ==2 and $hiru_ch_ok ==1){
$flag = 20;
  }elseif($yoru_ch ==3 and $hiru_ch_ok ==1){
$flag = 21;
  }
 }elseif($hiru_ch==2 and $hiru_ch_ok == 1){
  if($yoru_ch ==1 and $hiru_ch_ok ==1){
$flag = 22;
  }elseif($yoru_ch ==2 and $hiru_ch_ok ==1){
$flag = 23;
  }elseif($yoru_ch ==3 and $hiru_ch_ok ==1){
$flag = 24;
  }
 }elseif($hiru_ch==3 and $hiru_ch_ok == 1){
  if($yoru_ch ==1 and $hiru_ch_ok ==1){
     $flag = 25;
  }elseif($yoru_ch ==2 and $hiru_ch_ok ==1){
$flag = 26;
  }elseif($yoru_ch ==3 and $hiru_ch_ok ==1){
$flag = 27;
  }
}
}

A 回答 (2件)

#1です。



if($asa_ch_ok == 1 and $hiru_ch_ok == 1){
 if($asa_ch>=1 and $asa_ch<=3 and $hiru_ch >=1 and $hiru_ch<=3 and $yoru_ch>=1 and $yoru_ch<=3){
  $flag = ($asa_ch - 1) * 9 + ($hiru_ch - 1) * 3 + $yoru_ch;
 }
}
の方がいいかも…。
(インデントのために全角スペース使ってます。)
    • good
    • 0
この回答へのお礼

edomin2004様
ありがとうございます。
動作を確認し改めて感動しました。
ダラダラと長文になって困っていましたが、
本当にこんなに短くなってすっきりできて感動です。
ありがとうございました。

お礼日時:2008/01/08 11:29

こういうことでしょうか?



if($asa_ch_ok == 1 and $hiru_ch_ok == 1){
 $flag = ($asa_ch - 1) * 9 + ($hiru_ch - 1) * 3 + $yoru_ch;
}
    • good
    • 0

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