2016-08-06 2 views
0

두 변수 ($x$y)를 기반으로 조치를 취해야합니다. 다음은 그러한 요구를 충족 시키지만 아주 읽기 어려운 것은 아니며 $x/$y1/4 인 것은 $x/$y5/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); 
관련 문제