質問編集履歴

3

追記

2018/07/04 07:46

投稿

Fetherion
Fetherion

スコア60

test CHANGED
File without changes
test CHANGED
@@ -373,3 +373,75 @@
373
373
 
374
374
 
375
375
  よろしくお願いいたします。
376
+
377
+
378
+
379
+ ---
380
+
381
+ ###今回の解決コード
382
+
383
+ ご指摘、回答していただき大変ありがとうございます。
384
+
385
+ 今回は下記のような形で完了と致しましたので、こちらにまとめとして記載しておきます。
386
+
387
+ ```php
388
+
389
+ // デモデータ
390
+
391
+ $demo[] = ['id' => '1111', 'number' => '1'];
392
+
393
+ $demo[] = ['id' => '1111', 'number' => '3'];
394
+
395
+ $demo[] = ['id' => '1111', 'number' => '5'];
396
+
397
+
398
+
399
+ $numbers = array_column($demo, 'number');
400
+
401
+ $filter = [1, 2, 3, 4];
402
+
403
+
404
+
405
+ // 配列内のnumberの値が5だった場合その配列自体は必要ないものとしました。
406
+
407
+ foreach($demo as $key => $val) {
408
+
409
+ if($demo[$key]['number'] === '5') {
410
+
411
+ unset($demo[$key]);
412
+
413
+ }
414
+
415
+ }
416
+
417
+
418
+
419
+ // 今回回答していただいた部分のコードです
420
+
421
+ for($i = 1; $i <= 4; $i++) {
422
+
423
+ if(!in_array($i, $filter)) {
424
+
425
+ array_splice($demo, $i, 1);
426
+
427
+ continue;
428
+
429
+ }
430
+
431
+ if(!in_array($i, $numbers)) {
432
+
433
+ $demo[] = ['id' => $demo[0]['id'], 'number' => $i];
434
+
435
+ }
436
+
437
+ }
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+ var_dump($demo);
446
+
447
+ ```

2

修正

2018/07/04 07:46

投稿

Fetherion
Fetherion

スコア60

test CHANGED
File without changes
test CHANGED
@@ -162,10 +162,6 @@
162
162
 
163
163
  ```
164
164
 
165
- 結局5を無視するわけだからそれは無視しつつ、別の配列にするということで考えました。
166
-
167
- 結果は上記と同じに当然なりました。
168
-
169
165
 
170
166
 
171
167
  ###やっと質問の部分に入ります

1

修正

2018/07/04 06:09

投稿

Fetherion
Fetherion

スコア60

test CHANGED
File without changes
test CHANGED
@@ -68,6 +68,134 @@
68
68
 
69
69
  ["number"]=>
70
70
 
71
+ int(1)
72
+
73
+ }
74
+
75
+ [1]=>
76
+
77
+ array(2) {
78
+
79
+ ["id"]=>
80
+
81
+ string(4) "1111"
82
+
83
+ ["number"]=>
84
+
85
+ int(2)
86
+
87
+ }
88
+
89
+ [2]=>
90
+
91
+ array(2) {
92
+
93
+ ["id"]=>
94
+
95
+ string(4) "1111"
96
+
97
+ ["number"]=>
98
+
99
+ int(3)
100
+
101
+ }
102
+
103
+ [3]=>
104
+
105
+ array(2) {
106
+
107
+ ["id"]=>
108
+
109
+ string(4) "1111"
110
+
111
+ ["number"]=>
112
+
113
+ int(4)
114
+
115
+ }
116
+
117
+ }
118
+
119
+ ```
120
+
121
+
122
+
123
+ ###デモデータ2
124
+
125
+ ```php
126
+
127
+ $demo[] = ['id' => '1111', 'number' => 1];
128
+
129
+ $demo[] = ['id' => '1111', 'number' => 5];
130
+
131
+ ```
132
+
133
+
134
+
135
+ ###やりたいこと2
136
+
137
+ 考え方などはやりたいこと1などと基本同じですが、number = 5については配列内から除去しておきたい。
138
+
139
+
140
+
141
+ ###とりあえず書いてみたコード2
142
+
143
+ ```php
144
+
145
+ for($i = 0; $i < 4; $i++) {
146
+
147
+ $num = $i + 1;
148
+
149
+ $key = array_search($num, array_column($demo, 'number'));
150
+
151
+ if($key === false) {
152
+
153
+ $demodemo[] = ['id' => $demo[0]['id'], 'number' => $num];
154
+
155
+ } else {
156
+
157
+ $demodemo[] = $demo[$i];
158
+
159
+ }
160
+
161
+ }
162
+
163
+ ```
164
+
165
+ 結局5を無視するわけだからそれは無視しつつ、別の配列にするということで考えました。
166
+
167
+ 結果は上記と同じに当然なりました。
168
+
169
+
170
+
171
+ ###やっと質問の部分に入ります
172
+
173
+ デモデータにおいて、numberが順番に入っているわけではない場合があります。例えば下記
174
+
175
+ ```php
176
+
177
+ $demo[] = ['id' => '1111', 'number' => '1'];
178
+
179
+ $demo[] = ['id' => '1111', 'number' => '3'];
180
+
181
+ ```
182
+
183
+ こちらをvar_dump()すると当然下記のようになります
184
+
185
+ ```php
186
+
187
+ array(2) {
188
+
189
+ [0]=>
190
+
191
+ array(2) {
192
+
193
+ ["id"]=>
194
+
195
+ string(4) "1111"
196
+
197
+ ["number"]=>
198
+
71
199
  string(1) "1"
72
200
 
73
201
  }
@@ -82,23 +210,61 @@
82
210
 
83
211
  ["number"]=>
84
212
 
85
- string(1) "2"
213
+ string(1) "3"
214
+
215
+ }
216
+
217
+ }
218
+
219
+ ```
220
+
221
+ そして、考え方は同じではありますが、すでにあるデータはそのまま残したいのでやりたいこと2で書いたコードの方が当てはまると考えました。
222
+
223
+ しかし、、、この場合だと少し結果が意図したものにならず、わからなくなってきています。
224
+
225
+ 見分けをつけるために今回は抽出したデータのnumberはstringにしています。
226
+
227
+
228
+
229
+ ###エラー結果1
230
+
231
+ ```php
232
+
233
+ Notice: Undefined offset: 2 in /in/TRC3Z on line 15
234
+
235
+ array(4) {
236
+
237
+ [0]=>
238
+
239
+ array(2) {
240
+
241
+ ["id"]=>
242
+
243
+ string(4) "1111"
244
+
245
+ ["number"]=>
246
+
247
+ string(1) "1"
248
+
249
+ }
250
+
251
+ [1]=>
252
+
253
+ array(2) {
254
+
255
+ ["id"]=>
256
+
257
+ string(4) "1111"
258
+
259
+ ["number"]=>
260
+
261
+ int(2)
86
262
 
87
263
  }
88
264
 
89
265
  [2]=>
90
266
 
91
- array(2) {
92
-
93
- ["id"]=>
94
-
95
- string(4) "1111"
96
-
97
- ["number"]=>
98
-
99
- int(3)
267
+ NULL
100
-
101
- }
102
268
 
103
269
  [3]=>
104
270
 
@@ -118,59 +284,79 @@
118
284
 
119
285
  ```
120
286
 
121
-
122
-
123
- ###データ2
124
-
125
- ```php
126
-
127
- $demo[] = ['id' => '1111', 'number' => 1];
128
-
129
- $demo[] = ['id' => '1111', 'number' => 5];
130
-
131
- ```
132
-
133
-
134
-
135
- ###やりたいこと2
136
-
137
- 考え方などはやりたいこと1などと基本同じですが、number = 5については配列内から除去しておきたい。
138
-
139
-
140
-
141
- ###とりあえず書いてみたコード2
142
-
143
- ```php
144
-
145
- for($i = 0; $i < 4; $i++) {
146
-
147
- $num = $i + 1;
148
-
149
- $key = array_search($num, array_column($demo, 'number'));
150
-
151
- if($key === false) {
152
-
153
- $demodemo[] = ['id' => $demo[0]['id'], 'number' => $num];
154
-
155
- } else {
156
-
157
- $demodemo[] = $demo[$i];
158
-
159
- }
160
-
161
- }
162
-
163
- ```
164
-
165
- 結局5を無視するわけだからそれは無視しつつ、別の配列にするということで考えました。
166
-
167
- 結果は上記と同じに当然なりました。
168
-
169
-
170
-
171
- ###やっと質問の部分に入ります
172
-
173
- デモデータにおいて、numberが順番に入っているわけではない場合があります。例えば下記
287
+ まぁ当然かな、、、と思います。
288
+
289
+ ータとしては$demodemo[1]にはFALSE側の条件が当てはまってしまいデータが入り、$demo[1]のデータがずれて$demodemo[2]に入らないといけないけど、うまくいっていないというのはなんとなくわかるのですが、、、
290
+
291
+
292
+
293
+ では、この辺りをうまく下記の結果のようにするには?
294
+
295
+ ```php
296
+
297
+ array(4) {
298
+
299
+ [0]=>
300
+
301
+ array(2) {
302
+
303
+ ["id"]=>
304
+
305
+ string(4) "1111"
306
+
307
+ ["number"]=>
308
+
309
+ string(1) "1"
310
+
311
+ }
312
+
313
+ [1]=>
314
+
315
+ array(2) {
316
+
317
+ ["id"]=>
318
+
319
+ string(4) "1111"
320
+
321
+ ["number"]=>
322
+
323
+ int(2)
324
+
325
+ }
326
+
327
+ [2]=>
328
+
329
+ array(2) {
330
+
331
+ ["id"]=>
332
+
333
+ string(4) "1111"
334
+
335
+ ["number"]=>
336
+
337
+ string(1) "3"
338
+
339
+ }
340
+
341
+ [3]=>
342
+
343
+ array(2) {
344
+
345
+ ["id"]=>
346
+
347
+ string(4) "1111"
348
+
349
+ ["number"]=>
350
+
351
+ int(4)
352
+
353
+ }
354
+
355
+ }
356
+
357
+ ```
358
+
359
+ そして、デモデータが下記だった場合
174
360
 
175
361
  ```php
176
362
 
@@ -178,192 +364,6 @@
178
364
 
179
365
  $demo[] = ['id' => '1111', 'number' => '3'];
180
366
 
181
- ```
182
-
183
- こちらをvar_dump()すると当然下記のようになります
184
-
185
- ```php
186
-
187
- array(2) {
188
-
189
- [0]=>
190
-
191
- array(2) {
192
-
193
- ["id"]=>
194
-
195
- string(4) "1111"
196
-
197
- ["number"]=>
198
-
199
- string(1) "1"
200
-
201
- }
202
-
203
- [1]=>
204
-
205
- array(2) {
206
-
207
- ["id"]=>
208
-
209
- string(4) "1111"
210
-
211
- ["number"]=>
212
-
213
- string(1) "3"
214
-
215
- }
216
-
217
- }
218
-
219
- ```
220
-
221
- そして、考え方は同じではありますが、すでにあるデータはそのまま残したいのでやりたいこと2で書いたコードの方が当てはまると考えました。
222
-
223
- しかし、、、この場合だと少し結果が意図したものにならず、わからなくなってきています。
224
-
225
- 見分けをつけるために今回は抽出したデータのnumberはstringにしています。
226
-
227
-
228
-
229
- ###エラー結果1
230
-
231
- ```php
232
-
233
- Notice: Undefined offset: 2 in /in/TRC3Z on line 15
234
-
235
- array(4) {
236
-
237
- [0]=>
238
-
239
- array(2) {
240
-
241
- ["id"]=>
242
-
243
- string(4) "1111"
244
-
245
- ["number"]=>
246
-
247
- string(1) "1"
248
-
249
- }
250
-
251
- [1]=>
252
-
253
- array(2) {
254
-
255
- ["id"]=>
256
-
257
- string(4) "1111"
258
-
259
- ["number"]=>
260
-
261
- int(2)
262
-
263
- }
264
-
265
- [2]=>
266
-
267
- NULL
268
-
269
- [3]=>
270
-
271
- array(2) {
272
-
273
- ["id"]=>
274
-
275
- string(4) "1111"
276
-
277
- ["number"]=>
278
-
279
- int(4)
280
-
281
- }
282
-
283
- }
284
-
285
- ```
286
-
287
- まぁ当然かな、、、と思います。
288
-
289
- データとしては$demodemo[1]にはFALSE側の条件が当てはまってしまいデータが入り、$demo[1]のデータがずれて$demodemo[2]に入らないといけないけど、うまくいっていないというのはなんとなくわかるのですが、、、
290
-
291
-
292
-
293
- では、この辺りをうまく下記の結果のようにするには?
294
-
295
- ```php
296
-
297
- array(4) {
298
-
299
- [0]=>
300
-
301
- array(2) {
302
-
303
- ["id"]=>
304
-
305
- string(4) "1111"
306
-
307
- ["number"]=>
308
-
309
- string(1) "1"
310
-
311
- }
312
-
313
- [1]=>
314
-
315
- array(2) {
316
-
317
- ["id"]=>
318
-
319
- string(4) "1111"
320
-
321
- ["number"]=>
322
-
323
- int(2)
324
-
325
- }
326
-
327
- [2]=>
328
-
329
- array(2) {
330
-
331
- ["id"]=>
332
-
333
- string(4) "1111"
334
-
335
- ["number"]=>
336
-
337
- string(1) "3"
338
-
339
- }
340
-
341
- [3]=>
342
-
343
- array(2) {
344
-
345
- ["id"]=>
346
-
347
- string(4) "1111"
348
-
349
- ["number"]=>
350
-
351
- int(4)
352
-
353
- }
354
-
355
- }
356
-
357
- ```
358
-
359
- そして、デモデータが下記だった場合
360
-
361
- ```php
362
-
363
- $demo[] = ['id' => '1111', 'number' => '1'];
364
-
365
- $demo[] = ['id' => '1111', 'number' => '3'];
366
-
367
367
  $demo[] = ['id' => '1111', 'number' => '5'];
368
368
 
369
369
  ```