回答編集履歴

1

追記:ちょっと組みなおしてみた

2020/07/14 09:49

投稿

m.ts10806
m.ts10806

スコア80859

test CHANGED
@@ -3,3 +3,91 @@
3
3
  switchを使う場面ではないと思います。
4
4
 
5
5
  私は少なくとも定数的にかっちり決まったものを出すためにswitchを使います。
6
+
7
+
8
+
9
+ 別案
10
+
11
+ ---
12
+
13
+
14
+
15
+ かえって遠回りになった気もするけど、ロジック組まなくても増減可能という点で、参考まで。
16
+
17
+ ```php
18
+
19
+ <?php
20
+
21
+ define("EQQ","eq");
22
+
23
+ define("ORR","or");
24
+
25
+ $msg = [
26
+
27
+ EQQ=>'%sです'
28
+
29
+ ,ORR=>'%sかもしれない'
30
+
31
+ ];
32
+
33
+ $list = [
34
+
35
+ 'bread'=>['name'=>'パン','conf'=>EQQ]
36
+
37
+ ,'salad'=>['name'=>'サラダ','conf'=>EQQ]
38
+
39
+ ,'steak'=>['name'=>'ステーキ','conf'=>ORR]
40
+
41
+ ,'yakitori'=>['name'=>'やきとり','conf'=>ORR]
42
+
43
+ ];
44
+
45
+
46
+
47
+ $word = 'steak';
48
+
49
+
50
+
51
+ if(array_key_exists($word,$list)){
52
+
53
+ $w = $list[$word];
54
+
55
+ echo '朝ごはんは';
56
+
57
+ switch($w['conf']){
58
+
59
+ case EQQ:
60
+
61
+ echo sprintf($msg[$w['conf']],$w['name']);
62
+
63
+ break;
64
+
65
+ case ORR:
66
+
67
+ $words = [];
68
+
69
+ foreach($list as $cd=>$row){
70
+
71
+ if($row['conf']===ORR){
72
+
73
+ $words[] = sprintf($msg[ORR],$row['name']);
74
+
75
+ }
76
+
77
+ }
78
+
79
+ echo implode('し、',$words).'です';
80
+
81
+ break;
82
+
83
+
84
+
85
+ }
86
+
87
+ }
88
+
89
+
90
+
91
+
92
+
93
+ ```