回答編集履歴

3

追記

2021/12/24 06:07

投稿

KazuhiroHatano
KazuhiroHatano

スコア7819

test CHANGED
@@ -117,3 +117,15 @@
117
117
  ])];//?色
118
118
 
119
119
  ```
120
+
121
+
122
+
123
+ 頭の中で二進数を数えられるなら
124
+
125
+ ``$resultMap``の``0b111=>``みたいなキーの部分を省け
126
+
127
+ かつ組み合わせの抜け漏れを防げますが
128
+
129
+ そうするとどれがどれかわからなくなるので
130
+
131
+ とりあえず``$resultMap``はこのぐらいが妥協点

2

修正

2021/12/24 06:07

投稿

KazuhiroHatano
KazuhiroHatano

スコア7819

test CHANGED
@@ -74,7 +74,7 @@
74
74
 
75
75
  if($answers['diagnose_'.$i]==='yes'){
76
76
 
77
- $rtn|=1<<($i-1);
77
+ $rtn|=1<<(3-$i);
78
78
 
79
79
  }
80
80
 
@@ -114,6 +114,6 @@
114
114
 
115
115
  'diagnose_3'=>'yes',
116
116
 
117
- ])];//
117
+ ])];//
118
118
 
119
119
  ```

1

追記

2021/12/24 05:53

投稿

KazuhiroHatano
KazuhiroHatano

スコア7819

test CHANGED
@@ -27,3 +27,93 @@
27
27
  フラグの集合も渡す仕様にしておけば
28
28
 
29
29
  動的な出力にも対応しやすくなると思います
30
+
31
+
32
+
33
+ ---
34
+
35
+
36
+
37
+ 仕様変更とか内容変更に強いわけじゃなく
38
+
39
+ 誰にでもわかりやすいコードというわけでもないですが
40
+
41
+ こういうやり方もあるよという参考程度に
42
+
43
+
44
+
45
+ ```php
46
+
47
+ <?php
48
+
49
+ $resultMap=[
50
+
51
+ 0b111=>'赤色',
52
+
53
+ 0b110=>'黄色',
54
+
55
+ 0b101=>'白色',
56
+
57
+ 0b100=>'緑色',
58
+
59
+ 0b011=>'紫色',
60
+
61
+ 0b010=>'?色',
62
+
63
+ 0b001=>'?色',
64
+
65
+ 0b000=>'青色',
66
+
67
+ ];
68
+
69
+ function getResutID(array $answers):int{
70
+
71
+ $rtn=0;
72
+
73
+ foreach(range(1,3) as $i){
74
+
75
+ if($answers['diagnose_'.$i]==='yes'){
76
+
77
+ $rtn|=1<<($i-1);
78
+
79
+ }
80
+
81
+ }
82
+
83
+ return $rtn;
84
+
85
+ }
86
+
87
+
88
+
89
+ echo $resultMap[getResutID([
90
+
91
+ 'diagnose_1'=>'yes',
92
+
93
+ 'diagnose_2'=>'yes',
94
+
95
+ 'diagnose_3'=>'yes',
96
+
97
+ ])];//赤色
98
+
99
+ echo $resultMap[getResutID([
100
+
101
+ 'diagnose_1'=>'yes',
102
+
103
+ 'diagnose_2'=>'no',
104
+
105
+ 'diagnose_3'=>'yes',
106
+
107
+ ])];//白色
108
+
109
+ echo $resultMap[getResutID([
110
+
111
+ 'diagnose_1'=>'no',
112
+
113
+ 'diagnose_2'=>'no',
114
+
115
+ 'diagnose_3'=>'yes',
116
+
117
+ ])];//緑色
118
+
119
+ ```