質問編集履歴

2

追記

2018/08/22 00:14

投稿

MeB
MeB

スコア104

test CHANGED
File without changes
test CHANGED
@@ -36,6 +36,16 @@
36
36
 
37
37
  </div>
38
38
 
39
+ <div class="form-list">
40
+
41
+ <p>カラー</p>
42
+
43
+ <input type="radio" id="color01" name="color" value="red"><label for="color01">赤</label>
44
+
45
+ <input type="radio" id="color02" name="color" value="blue,green"><label for="color02">青または緑</label>
46
+
47
+ </div>
48
+
39
49
  <button class="submit" value="check">検索</button>
40
50
 
41
51
  </form>
@@ -124,7 +134,9 @@
124
134
 
125
135
  [
126
136
 
127
- "type"=>"1"
137
+ "type"=>"1",
138
+
139
+ "color"=>"red"
128
140
 
129
141
  ],
130
142
 
@@ -132,18 +144,24 @@
132
144
 
133
145
  "type"=>"2"
134
146
 
147
+ "color"=>"red"
148
+
135
149
  ],
136
150
 
137
151
  [
138
152
 
139
153
  "type"=>"3"
140
154
 
155
+ "color"=>"blue"
156
+
141
157
  ],
142
158
 
143
159
  [
144
160
 
145
161
  "type"=>"4"
146
162
 
163
+ "color"=>"green"
164
+
147
165
  ]
148
166
 
149
167
  ]
@@ -203,3 +221,31 @@
203
221
  複数のtypeがヒットするのでしょうか?
204
222
 
205
223
  ご教示のほどよろしくお願いします。
224
+
225
+
226
+
227
+ 追記
228
+
229
+ 質問の趣旨が少し変わってしまうので指摘がありましたら別で質問いたします。
230
+
231
+
232
+
233
+ papinianusさんのご回答を元に項目がtype以外にも必要だったため
234
+
235
+ ```php
236
+
237
+ $result = array_filter($data["test"],function($x) use($type,$color) {
238
+
239
+ return (is_null($type) || in_array($x["type"], $type_split, true)) &&
240
+
241
+ (is_null($color) || in_array($x["color"], $color_split, true));
242
+
243
+ });
244
+
245
+ としましたが、この状態ですと全ての項目に当てはまっているものした表示されませんでした。
246
+
247
+ 例:カラー項目の青または緑のみを押した場合typeでいうと3と4を表示したいがcolorがチェックされていないため何も表示されない状態です。
248
+
249
+ ※htmlとphpの配列にcolorの項目を追記しています。
250
+
251
+ ```

1

修正

2018/08/22 00:14

投稿

MeB
MeB

スコア104

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,13 @@
8
8
 
9
9
 
10
10
 
11
- 現状はvalueが1つであれば動く状態です。valueの中が2つ以上(value="1,2,3")の場合は動かないです。
11
+ ~~現状はvalueが1つであれば動く状態です。valueの中が2つ以上(value="1,2,3")の場合は動かないです。~~
12
+
13
+ 訂正
14
+
15
+ 現状はvalueが1つであれば正常に検索され該当の配列のみが表示されます。
16
+
17
+ valueの中が2つ以上(value="1,2,3")の場合は下記のphpに記述しましたが"チェックされてない"が表示されます。
12
18
 
13
19
 
14
20
 
@@ -104,9 +110,11 @@
104
110
 
105
111
  $type = filter_input( INPUT_POST, "type" );
106
112
 
107
- $type_split = preg_split("/,/", $type); //,で区切って取って見ましたが動きませんでした。
113
+ $type_split = preg_split("/,/", $type); //,で区切って取って見ましたが動きませんでした。追記:配列にカンマ区切りでそれぞれのあたいは入るのですが、正常の検索されまでんでした。
114
+
108
-
115
+                         //下記のif文のところですと"チェックされてない"が表示されます。
116
+
109
- $type_implode = implode($type_split);//区切ったもの文字列にしたのですが"12"となってしまいうまく行きませんでした。
117
+ $type_implode = implode($type_split);//区切ったもの文字列にしたのですが"12"となってしまいうまく行きませんでした。追記:結果が"12"となってしまうため同じく"チェックされてない"が表示されます。
110
118
 
111
119
 
112
120