質問するログイン新規登録

回答編集履歴

1

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

2020/07/14 09:49

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,3 +1,47 @@
1
1
  「かもしれない」などあいまいな表現で出したいなら素直にif文にorを書きましょう。
2
2
  switchを使う場面ではないと思います。
3
- 私は少なくとも定数的にかっちり決まったものを出すためにswitchを使います。
3
+ 私は少なくとも定数的にかっちり決まったものを出すためにswitchを使います。
4
+
5
+ 別案
6
+ ---
7
+
8
+ かえって遠回りになった気もするけど、ロジック組まなくても増減可能という点で、参考まで。
9
+ ```php
10
+ <?php
11
+ define("EQQ","eq");
12
+ define("ORR","or");
13
+ $msg = [
14
+ EQQ=>'%sです'
15
+ ,ORR=>'%sかもしれない'
16
+ ];
17
+ $list = [
18
+ 'bread'=>['name'=>'パン','conf'=>EQQ]
19
+ ,'salad'=>['name'=>'サラダ','conf'=>EQQ]
20
+ ,'steak'=>['name'=>'ステーキ','conf'=>ORR]
21
+ ,'yakitori'=>['name'=>'やきとり','conf'=>ORR]
22
+ ];
23
+
24
+ $word = 'steak';
25
+
26
+ if(array_key_exists($word,$list)){
27
+ $w = $list[$word];
28
+ echo '朝ごはんは';
29
+ switch($w['conf']){
30
+ case EQQ:
31
+ echo sprintf($msg[$w['conf']],$w['name']);
32
+ break;
33
+ case ORR:
34
+ $words = [];
35
+ foreach($list as $cd=>$row){
36
+ if($row['conf']===ORR){
37
+ $words[] = sprintf($msg[ORR],$row['name']);
38
+ }
39
+ }
40
+ echo implode('し、',$words).'です';
41
+ break;
42
+
43
+ }
44
+ }
45
+
46
+
47
+ ```