2016-08-06 10 views
0

私は2つの変数($x$y)に基づいて行動を取らなければなりません。以下はこれらのニーズを満たしていますが、あまり読みにくくないので、$x/$y1/4$x/$yと同じことを5/3と同じにしています。読みやすさと保守性の観点から、これをコード化する最良の方法は何ですか?私は特にPHPソリューションを求めていますが、そのソリューションはJavaScriptなどの他の言語にも拡張できることを願っています。あなたはこれをマッピングする配列を加えた場合2次元if/then行列

<?php 
    switch($x) { 
     case 1: case 2: case 3: 
     switch($y) { 
      case 1: case 2: 
      doTask(1); 
      break; 
      case 3: case 4: 
      doTask(2); 
      break; 
      default: 
      doTask(3); 
     } 
     break; 
     case 4: case 5: 
     switch($y) { 
      case 1: case 2: case 4: 
      doTask(4); 
      break; 
      case 3: 
      doTask(2); 
      break; 
      default: 
      doTask(2); 
     } 
     break; 
     default: 
     switch($y) { 
      case 1: 
      doTask(6); 
      break; 
      case 2: case 3: case 4: 
      doTask(2); 
      break; 
      default: 
      doTask(3); 
     } 
    } 
?> 
+0

' $ y'を持つことができますか?もしsetが制限されていれば、結合変数 '$ xy'を作成し、それを単一の' switch($ xy){... ' –

+0

@MarkusLaire' $ x'と '$ y'で使うことができます、私はそれらを単一の値にどのように組み合わせると役立つか分かりません。 – user1032531

+0

私はおそらくhttp://codereview.stackexchange.com/に属しているので、この質問を議論の対象外とすることに投票しています。 – RiggsFolly

答えて

1

、それは次のように動作します:

は `$ X 'と値は何
$task_x = [ 
    1 => [1 => 1, 2 => 1, 3 => 2, 4 => 2, 'd' => 3], 
    2 => [1 => 1, 2 => 1, 3 => 2, 4 => 2, 'd' => 3], 
    3 => [1 => 1, 2 => 1, 3 => 2, 4 => 2, 'd' => 3], 
    4 => [1 => 4, 2 => 4, 3 => 2, 4 => 4, 'd' => 2], 
    5 => [1 => 4, 2 => 4, 3 => 2, 4 => 4, 'd' => 2], 
    'd' => [1 => 6, 2 => 2, 3 => 2, 4 => 2, 'd' => 3] 
]; 

// PHP 7   
$task_y = $task_x[$x] ?? $task_x['d']; 
$task_n = $task_y[$y] ?? $task_y['d']; 

// or PHP 5 
//$task_y = isset($task_x[$x]) ? $task_x[$x] : $task_x['d']; 
//$task_n = isset($task_y[$y]) ? $task_y[$y] : $task_y['d']; 

doTask($task_n);