2016-08-06 4 views
0

Мне нужно принять меры на основе двух переменных ($x и $y). Следующее отвечает этим требованиям, но не очень читаемо, и не совсем очевидно, что $x/$y от 1/4 делает то же, что и $x/$y от 5/3. С точки зрения читабельности и удобства обслуживания, как лучше всего это кодировать? Хотя я специально прошу PHP-решение, надеюсь, решение может быть распространено на другие языки, такие как JavaScript.двухмерная матрица 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

Какие значения '$ x' и' $ y' может иметь? Если набор ограничен, тогда вы можете создать объединенную переменную '$ xy' и использовать ее в одном' switch ($ xy) {... ' –

+0

@MarkusLaire' $ x' и '$ y' будут иметь только ограниченные значения, однако , Я не понимаю, как помочь им объединить их в одну ценность. – user1032531

+0

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что он, вероятно, принадлежит http://codereview.stackexchange.com/ – RiggsFolly

ответ

1

Если вы сделали массив для отображения этого, он будет работать так:

$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);