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

質問編集履歴

2

*編集前の質問を消してしまったため、後半に追記しました。 ご迷惑をおかけ申し訳ありません。

2020/01/18 09:16

投稿

ayala
ayala

スコア6

title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,6 @@
1
+ *編集前の質問を消してしまったため、後半に追記しました。
2
+ ご迷惑をおかけ申し訳ありません。
3
+
1
4
  ## 前提・実現したいこと
2
5
 
3
6
  PHPの連想配列を用い置換したいのですが
@@ -91,4 +94,51 @@
91
94
  エラーメッセージ
92
95
 
93
96
  PHP Notice: Array to string conversion in /workspace/Main.php on line 16
97
+ ```
98
+
99
+ ##編集前の内容
100
+
101
+ ###PHPの配列で複数のキーに一つの値を入れたい場合
102
+ PHPの配列で複数のキーに一つの値を入れ置換するやり方が知りたいです。
103
+
104
+ 下記の「元ソースコード」を「イメージのソース」のように
105
+ 複数のキーに一つの値を入れる際に1行ですませるようにしたいです。
106
+
107
+ ### 元のソースコード
108
+
109
+ ```php
110
+ <?php
111
+
112
+
113
+ $replace = [
114
+ '山梨放送' => '山梨県',
115
+ 'テレビ山梨' => '山梨県',
116
+ ];
117
+
118
+ print_r($replace);
119
+
120
+ ?>
121
+
122
+ ```
123
+
124
+ ### イメージのソースコード
125
+
126
+ ```php
127
+ <?php
128
+
129
+ $yamanashi = ['山梨放送','テレビ山梨' ];
130
+
131
+ $replace = [
132
+ $yamanashi => '山梨県'
133
+ ];
134
+
135
+ print_r($replace);
136
+ ?>
137
+
138
+ ```
139
+ ```
140
+ エラーメッセージ
141
+
142
+ PHP Warning: Illegal offset type in /workspace/Main.php on line 6
143
+
94
144
  ```

1

*編集追記:自分の質問した範囲で解決できると思っていましたができませんでしたので 内容を編集し、「どう使いたいか」を追記させていたしました。 意図や内容がわかりづらく申し訳ありませんでした。

2020/01/18 09:16

投稿

ayala
ayala

スコア6

title CHANGED
@@ -1,1 +1,1 @@
1
- PHPの配列で複数のキーに一つの値を入れたい場合
1
+ PHPの連想配列で複数のキーに一つの値を入れ置換したい場合
body CHANGED
@@ -1,67 +1,94 @@
1
- ### 前提・実現したいこと
1
+ ## 前提・実現したいこと
2
2
 
3
+ PHPの連想配列を用い置換したいのですが
3
- PHPで配列を使って、複数のキーに一つの値を入れたいです。
4
+ その際に、複数のキーに一つの値を入れ置換するやり方が知りたいです。
4
5
 
5
6
 
7
+ ##どう使いたいか
6
8
 
7
- ### 発生している問題・エラメッセ
9
+ 例として、下記に書かれている**「元のソスコド**」では放送局の数だけ要素を作る必要があるので
10
+ **「イメージのソースコード」**のように都道府県ごとに放送局を一つにまとめて都道府県名に置換したいです。
8
11
 
12
+ ## 問題
13
+ 配列で複数のキーに一つの値を入れ、それを連想配列に入れることはできたのですが
9
- 配列を使って置換をしようと考えています。
14
+ 置換を行おうとするとエラーになります。
15
+ エラーになったコード内容とエラー内容は**「試したたこと**」に記載しました。
10
16
 
11
- 1行で、複数に一つの値を入れるやり方がわかりません。
17
+ ### 元スコード
12
- キーの数だけ行を書けばできるのですが、1行ですませるにはどうすればよいでしょうか?
13
18
 
19
+ ```php
14
- 意図としては、下記に書かれている**「元のソースコード**」を**「イメージのソースコード」**のようなイメージで表示できるようにしたいです。
20
+ <?php
15
21
 
22
+ $target = 'テレビ山梨, 新潟放送, 新潟テレビ21';
16
23
 
24
+ $replace = [
25
+ '山梨放送' => '山梨県',
26
+ 'テレビ山梨' => '山梨県',
27
+ '新潟放送' => '新潟県',
28
+ 'テレビ新潟' => '新潟県',
29
+ '新潟総合テレビ' => '新潟県',
30
+ '新潟テレビ21' => '新潟県',
31
+ ];
32
+
33
+ echo str_replace(array_keys($replace), array_values($replace), $target);
34
+
35
+ // 結果 山梨県, 新潟県, 新潟県
36
+ ?>
37
+
17
38
  ```
18
- エラーメッセージ
19
- PHP Warning: Illegal offset type in /workspace/Main.php on line 6
20
- ```
21
39
 
22
- ### 元のソースコード
23
40
 
41
+ ### イメージのソースコード
42
+
24
43
  ```php
25
44
  <?php
26
45
 
46
+ $target = 'テレビ山梨, 新潟放送, 新潟テレビ21';
47
+
48
+ $yamanashi = ['山梨放送','テレビ山梨' ];
49
+ $niigata = ['新潟放送', 'テレビ新潟', '新潟総合テレビ', '新潟テレビ21' ];
50
+
27
51
  $replace = [
28
- '山梨放送' => '山梨県',
52
+ $yamanashi => '山梨県'
29
- 'テレビ山梨' => '山梨県',
53
+ $niigata => '新潟県'
30
54
  ];
31
-
32
-
55
+
33
- print_r($replace);
56
+ echo str_replace(array_keys($replace), array_values($replace), $target);
34
57
  ?>
35
58
 
36
59
  ```
37
60
 
38
61
 
39
- ### 試したこと
62
+ ## 試したこと
40
- 上のソースコードから、実現したいイメージのコードは以下のとおりです。
41
- しかし、これだとエラーが出てしまいます。
42
63
 
43
- ### イメジのソースコード
64
+ ### エラが出たソースコード
44
65
 
45
66
  ```php
67
+
46
68
  <?php
47
69
 
70
+ $target = 'テレビ山梨, 新潟放送, 新潟テレビ21';
71
+
48
72
  $yamanashi = ['山梨放送','テレビ山梨' ];
73
+ $res = array_combine( $yamanashi, array_pad( [], count( $yamanashi ), '山梨県' ) );
49
74
 
50
75
  $replace = [
76
+ $res,
51
- $yamanashi => '山梨県'
77
+ '新潟放送' => '新潟県',
78
+ 'テレビ新潟' => '新潟県',
79
+ '新潟総合テレビ' => '新潟県',
80
+ '新潟テレビ21' => '新潟県',
52
81
  ];
53
82
 
54
-
55
- print_r($replace);
83
+ echo str_replace(array_keys($replace), array_values($replace), $target);
84
+
56
85
  ?>
57
86
 
87
+
88
+
58
89
  ```
59
90
  ```
60
91
  エラーメッセージ
61
- PHP Warning: Illegal offset type in /workspace/Main.php on line 6
62
- ```
63
92
 
64
-
65
- ### 補足情報(FW/ツールのバージョンなど)
93
+ PHP Notice: Array to string conversion in /workspace/Main.php on line 16
66
-
67
- ここにより詳細な情報を記載してください。
94
+ ```