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

回答編集履歴

1

追記

2019/02/05 08:32

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,4 +1,131 @@
1
1
  > お客様がカートに入れた商品の情報を保持
2
2
 
3
3
  ログインしていたりログアウトしていたり買い物完了したりできちんとセッションを破棄していることは前提ですね。
4
- セッションには配列も保持できますので、カートに入れた商品のIDと個数を配列で保持して、その配列に追記していけば良いと思います。
4
+ セッションには配列も保持できますので、カートに入れた商品のIDと個数を配列で保持して、その配列に追記していけば良いと思います。
5
+
6
+ セッションというより配列の使い方の問題かなと。
7
+ 下記のような追加のされ方をしているので、「この商品が」というのを取り出すのが困難になっています。
8
+ ```php
9
+ $array = [];
10
+ array_push($array,"a","b","c");
11
+ var_dump($array);
12
+ array_push($array,"d","e","f");
13
+ var_dump($array);
14
+
15
+ /**
16
+ array(3) {
17
+ [0]=>
18
+ string(1) "a"
19
+ [1]=>
20
+ string(1) "b"
21
+ [2]=>
22
+ string(1) "c"
23
+ }
24
+ array(6) {
25
+ [0]=>
26
+ string(1) "a"
27
+ [1]=>
28
+ string(1) "b"
29
+ [2]=>
30
+ string(1) "c"
31
+ [3]=>
32
+ string(1) "d"
33
+ [4]=>
34
+ string(1) "e"
35
+ [5]=>
36
+ string(1) "f"
37
+ }
38
+ */
39
+ ```
40
+
41
+ ちなみに質問者さんのような配列で試すとこう
42
+ ```php
43
+ $array = [];
44
+ $array["cart"] = [];
45
+ array_push($array["cart"],"a","b","c");
46
+ var_dump($array);
47
+ array_push($array["cart"],"d","e","f");
48
+ var_dump($array);
49
+ /**
50
+
51
+ array(1) {
52
+ ["cart"]=>
53
+ array(3) {
54
+ [0]=>
55
+ string(1) "a"
56
+ [1]=>
57
+ string(1) "b"
58
+ [2]=>
59
+ string(1) "c"
60
+ }
61
+ }
62
+ array(1) {
63
+ ["cart"]=>
64
+ array(6) {
65
+ [0]=>
66
+ string(1) "a"
67
+ [1]=>
68
+ string(1) "b"
69
+ [2]=>
70
+ string(1) "c"
71
+ [3]=>
72
+ string(1) "d"
73
+ [4]=>
74
+ string(1) "e"
75
+ [5]=>
76
+ string(1) "f"
77
+ }
78
+ }
79
+ **/
80
+ ```
81
+
82
+ どこに何を入れたかこれでは分かりませんね。
83
+ キーでは入っていません。
84
+
85
+ ということは2次元配列である必要があります。
86
+ keyをうまく使う必要があるということですね。
87
+ ```php
88
+ $array = [];
89
+ array_push($array,["id"=>1,"number"=>5]);
90
+ var_dump($array);
91
+ array_push($array,["id"=>2,"number"=>8]);
92
+ var_dump($array);
93
+ /**
94
+
95
+ array(1) {
96
+ [0]=>
97
+ array(2) {
98
+ ["id"]=>
99
+ int(1)
100
+ ["number"]=>
101
+ int(5)
102
+ }
103
+ }
104
+ array(2) {
105
+ [0]=>
106
+ array(2) {
107
+ ["id"]=>
108
+ int(1)
109
+ ["number"]=>
110
+ int(5)
111
+ }
112
+ [1]=>
113
+ array(2) {
114
+ ["id"]=>
115
+ int(2)
116
+ ["number"]=>
117
+ int(8)
118
+ }
119
+ }
120
+ **/
121
+ ```
122
+
123
+ でも、これだと「同じ商品が指定されたとき」に対応できないので、
124
+ そもそもarray_push()だと対応が難しくなります。
125
+
126
+ 最初のkey自体を商品IDにすると楽です。
127
+ ※一応keyも全角文字列対応だったと思いますが、あまり推奨されませんので。
128
+ ```php
129
+ $array[1] = ["number"=>5];
130
+ $array[2] = ["number"=>8];
131
+ ```