回答編集履歴

1

追記

2019/02/05 08:32

投稿

m.ts10806
m.ts10806

スコア80850

test CHANGED
@@ -5,3 +5,257 @@
5
5
  ログインしていたりログアウトしていたり買い物完了したりできちんとセッションを破棄していることは前提ですね。
6
6
 
7
7
  セッションには配列も保持できますので、カートに入れた商品のIDと個数を配列で保持して、その配列に追記していけば良いと思います。
8
+
9
+
10
+
11
+ セッションというより配列の使い方の問題かなと。
12
+
13
+ 下記のような追加のされ方をしているので、「この商品が」というのを取り出すのが困難になっています。
14
+
15
+ ```php
16
+
17
+ $array = [];
18
+
19
+ array_push($array,"a","b","c");
20
+
21
+ var_dump($array);
22
+
23
+ array_push($array,"d","e","f");
24
+
25
+ var_dump($array);
26
+
27
+
28
+
29
+ /**
30
+
31
+ array(3) {
32
+
33
+ [0]=>
34
+
35
+ string(1) "a"
36
+
37
+ [1]=>
38
+
39
+ string(1) "b"
40
+
41
+ [2]=>
42
+
43
+ string(1) "c"
44
+
45
+ }
46
+
47
+ array(6) {
48
+
49
+ [0]=>
50
+
51
+ string(1) "a"
52
+
53
+ [1]=>
54
+
55
+ string(1) "b"
56
+
57
+ [2]=>
58
+
59
+ string(1) "c"
60
+
61
+ [3]=>
62
+
63
+ string(1) "d"
64
+
65
+ [4]=>
66
+
67
+ string(1) "e"
68
+
69
+ [5]=>
70
+
71
+ string(1) "f"
72
+
73
+ }
74
+
75
+ */
76
+
77
+ ```
78
+
79
+
80
+
81
+ ちなみに質問者さんのような配列で試すとこう
82
+
83
+ ```php
84
+
85
+ $array = [];
86
+
87
+ $array["cart"] = [];
88
+
89
+ array_push($array["cart"],"a","b","c");
90
+
91
+ var_dump($array);
92
+
93
+ array_push($array["cart"],"d","e","f");
94
+
95
+ var_dump($array);
96
+
97
+ /**
98
+
99
+
100
+
101
+ array(1) {
102
+
103
+ ["cart"]=>
104
+
105
+ array(3) {
106
+
107
+ [0]=>
108
+
109
+ string(1) "a"
110
+
111
+ [1]=>
112
+
113
+ string(1) "b"
114
+
115
+ [2]=>
116
+
117
+ string(1) "c"
118
+
119
+ }
120
+
121
+ }
122
+
123
+ array(1) {
124
+
125
+ ["cart"]=>
126
+
127
+ array(6) {
128
+
129
+ [0]=>
130
+
131
+ string(1) "a"
132
+
133
+ [1]=>
134
+
135
+ string(1) "b"
136
+
137
+ [2]=>
138
+
139
+ string(1) "c"
140
+
141
+ [3]=>
142
+
143
+ string(1) "d"
144
+
145
+ [4]=>
146
+
147
+ string(1) "e"
148
+
149
+ [5]=>
150
+
151
+ string(1) "f"
152
+
153
+ }
154
+
155
+ }
156
+
157
+ **/
158
+
159
+ ```
160
+
161
+
162
+
163
+ どこに何を入れたかこれでは分かりませんね。
164
+
165
+ キーでは入っていません。
166
+
167
+
168
+
169
+ ということは2次元配列である必要があります。
170
+
171
+ keyをうまく使う必要があるということですね。
172
+
173
+ ```php
174
+
175
+ $array = [];
176
+
177
+ array_push($array,["id"=>1,"number"=>5]);
178
+
179
+ var_dump($array);
180
+
181
+ array_push($array,["id"=>2,"number"=>8]);
182
+
183
+ var_dump($array);
184
+
185
+ /**
186
+
187
+
188
+
189
+ array(1) {
190
+
191
+ [0]=>
192
+
193
+ array(2) {
194
+
195
+ ["id"]=>
196
+
197
+ int(1)
198
+
199
+ ["number"]=>
200
+
201
+ int(5)
202
+
203
+ }
204
+
205
+ }
206
+
207
+ array(2) {
208
+
209
+ [0]=>
210
+
211
+ array(2) {
212
+
213
+ ["id"]=>
214
+
215
+ int(1)
216
+
217
+ ["number"]=>
218
+
219
+ int(5)
220
+
221
+ }
222
+
223
+ [1]=>
224
+
225
+ array(2) {
226
+
227
+ ["id"]=>
228
+
229
+ int(2)
230
+
231
+ ["number"]=>
232
+
233
+ int(8)
234
+
235
+ }
236
+
237
+ }
238
+
239
+ **/
240
+
241
+ ```
242
+
243
+
244
+
245
+ でも、これだと「同じ商品が指定されたとき」に対応できないので、
246
+
247
+ そもそもarray_push()だと対応が難しくなります。
248
+
249
+
250
+
251
+ 最初のkey自体を商品IDにすると楽です。
252
+
253
+ ※一応keyも全角文字列対応だったと思いますが、あまり推奨されませんので。
254
+
255
+ ```php
256
+
257
+ $array[1] = ["number"=>5];
258
+
259
+ $array[2] = ["number"=>8];
260
+
261
+ ```