質問編集履歴

2

「試したこと」を追加しました。

2020/11/09 04:18

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -416,9 +416,11 @@
416
416
 
417
417
  ```php
418
418
 
419
- foreach($cLrows as $value){
419
+ foreach($cLrows as $rows){
420
+
420
-
421
+ foreach($rows as $data){
422
+
421
- $ss = $value;
423
+ $ss = $data;
422
424
 
423
425
 
424
426
 
@@ -440,6 +442,12 @@
440
442
 
441
443
  }
442
444
 
443
-
445
+ }
444
446
 
445
447
  ```
448
+
449
+ - ```$ss```の値を、```foreach文```を使用せず、”1206(基準値)”を設定すると、会員番号1206の集計結果がきちんと表示されます。ただし、ループ処理を行っていないため、単一の会員番号の集計結果のみしか集計できません。
450
+
451
+
452
+
453
+ - phpなどのリファレンスを読んだり、「PHP 2次元配列」で検索してヒットした記事などを読みあさりましたが、解決できませんでした。

1

質問内容を最小限にとどめ、現時点でのソースコードを追記しました。

2020/11/09 04:18

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -10,19 +10,13 @@
10
10
 
11
11
  やりたいことは次の通りです。
12
12
 
13
- 0. **『会員番号だけのリスト(```$pLrows```)』**の会員番号の分だけ『集計結果』のループ処理(```$resMrows[会員番号]```)をできるようにしたい。
13
+ 0. **『会員番号だけのリスト(```$pLrows```)』**の会員番号の分だけ『集計結果』のループ処理(```$resMrows```)をできるようにしたい。
14
-
15
- 0. 『会員名簿リスト(```$cLrows[$gtNum]```)』『会員番号+集計結果(```$resMrows[会員番号]```)』を、SQL文で例えるなら『LEFT JOIN cLrows.会員番号 = resMrows.会員番号』のようにしたい。(例:会員番号|所属|氏名|役職|MMpt|MMpz|YYpt|YYpz)
14
+
16
-
15
+
16
+
17
- 0. 配列の並び替えをし、「YYptの値に対し降順(値が大きい順)」にしたい。
17
+ 【希望とする配列要素】
18
-
18
+
19
- 0. 並び替えができた、上位5件をピックアップしたい。(ランキング上位5名を抽出)
19
+ 初期ブログか抽出した会員番号リスト|$gtMMpt|$gtMMpz|$gtYYpt|$gtYYpz
20
-
21
-
22
-
23
-
24
-
25
-
26
20
 
27
21
 
28
22
 
@@ -44,170 +38,408 @@
44
38
 
45
39
 
46
40
 
47
-
48
-
49
- **【メインとなる『会員名簿』デ取得】**
41
+ 現状のソスコードを、次通り、ご報告します。
50
42
 
51
43
  ```wordpress
52
44
 
53
- (コード)
54
-
55
- $cLrows[$gtNum] = array(
56
-
57
-     'class' => $gtClass,
58
-
59
-     'name' => $gtName,
60
-
61
-     'pos' => $gtPost
45
+ <?php
46
+
47
+
48
+
49
+ // 期間設定の読込
50
+
51
+ $Mstart = do_shortcode( '[vMstart]' ); // 月間開始日
52
+
53
+ $Mend = do_shortcode( '[vMend]' ); // 月間終了日
54
+
55
+ $Ystart = do_shortcode( '[vYstart]' ); // 年間開始日
56
+
57
+ $Yend = do_shortcode( '[vYend]' ); // 年間終了日
58
+
59
+
60
+
61
+ ?>
62
+
63
+
64
+
65
+ <?php
66
+
67
+
68
+
69
+ // ------------------------------
70
+
71
+ // 会員名簿データからデータ抽出
72
+
73
+ // ------------------------------
74
+
75
+
76
+
77
+ // 会員名簿データのページID
78
+
79
+ $pid = '6085';
80
+
81
+
82
+
83
+ // 配列の初期化
84
+
85
+ $cLrows = [];
86
+
87
+ $pLrows = [];
88
+
89
+
90
+
91
+ // メインBLOG(blogID:1)データへ切替
92
+
93
+ if (get_current_blog_id() != 1) {
94
+
95
+ switch_to_blog(1);
96
+
97
+ }
98
+
99
+
100
+
101
+ // 会員名簿の読込&配列
102
+
103
+ if ( have_rows( 'list' , $pid ) ) :
104
+
105
+ while ( have_rows( 'list' , $pid ) ) : the_row();
106
+
107
+ $gtNum = get_sub_field( 'num' , $pid );
108
+
109
+ $gtClass = get_sub_field( 'class' , $pid );
110
+
111
+ $gtName = get_sub_field( 'name' , $pid );
112
+
113
+ $gtPos = get_sub_field( 'pos' , $pid );
114
+
115
+
116
+
117
+ // PHASE01:会員名簿リスト
118
+
119
+ $cLrows[$gtNum] = array(
120
+
121
+ 'class' => $gtClass,
122
+
123
+ 'name' => $gtName,
124
+
125
+ 'pos' => $gtPost
126
+
127
+ );
128
+
129
+
130
+
131
+ // PHASE02会員番号リスト
132
+
133
+ $pLrows[] = array(
134
+
135
+ 'num' => $gtNum
136
+
137
+ );
138
+
139
+ endwhile;
140
+
141
+ endif;
142
+
143
+
144
+
145
+ //カスタムクエリをリセット
146
+
147
+ wp_reset_postdata();
148
+
149
+ ?>
150
+
151
+ <?php
152
+
153
+
154
+
155
+ // 集計用BLOG(blogID:18)データへ切替
156
+
157
+ if (get_current_blog_id() != 18) {
158
+
159
+ switch_to_blog(18);
160
+
161
+ }
162
+
163
+ ?>
164
+
165
+ <?php
166
+
167
+
168
+
169
+ // 会員番号リストのループ処理
170
+
171
+ foreach( $pLrows as $rows ){
172
+
173
+
174
+
175
+ foreach( $rows as $data ){
176
+
177
+
178
+
179
+ $ss = $data;
180
+
181
+
182
+
183
+
184
+
185
+ // ------------------------------
186
+
187
+ // 会員番号による集計処理
188
+
189
+ // ------------------------------
190
+
191
+
192
+
193
+ $resMrows = [];
194
+
195
+
196
+
197
+ // 初期化
198
+
199
+ $gtMMpt = 0;
200
+
201
+ $gtMMpz = 0;
202
+
203
+
204
+
205
+ $args = array(
206
+
207
+ 'numberposts' => -1,
208
+
209
+ 'post_type' => 'post',
210
+
211
+ 'post_status' => 'publish',
212
+
213
+ 'wildcard_meta_key' => true,
214
+
215
+ 'meta_query' => array(
216
+
217
+ 'relation' => 'OR',
218
+
219
+ array(
220
+
221
+ 'key' => 'kzn_post_person01_kzn_p01_cnum',
222
+
223
+ 'compare' => '=',
224
+
225
+ 'value' => $ss,
226
+
227
+ ),
228
+
229
+ array(
230
+
231
+ 'key' => 'kzn_post_person02_kzn_p02_cnum',
232
+
233
+ 'compare' => '=',
234
+
235
+ 'value' => $ss,
236
+
237
+ ),
238
+
239
+ ),
240
+
241
+
242
+
243
+ );
244
+
245
+
246
+
247
+ $mm_query = new WP_Query($args);
248
+
249
+
250
+
251
+ while ( $mm_query->have_posts() ) :
252
+
253
+ $mm_query->the_post();
254
+
255
+
256
+
257
+
258
+
259
+ // ページIDの取得
260
+
261
+ $pid = get_the_ID();
262
+
263
+
264
+
265
+ // 基本情報の取得
266
+
267
+ if ( have_rows( 'kzn_info' , $pid ) ) :
268
+
269
+ while ( have_rows( 'kzn_info' , $pid ) ) : the_row();
270
+
271
+ $reg_date = get_sub_field( 'kzn_reg_date' , $pid ); // 登録日
272
+
273
+ endwhile;
274
+
275
+ endif;
276
+
277
+
278
+
279
+ // 一人目の受賞者情報の取得
280
+
281
+ if ( have_rows( 'kzn_post_person01' , $pid ) ) :
282
+
283
+ while ( have_rows( 'kzn_post_person01' , $pid ) ) : the_row();
284
+
285
+ $p01num = get_sub_field( 'kzn_p01_cnum' , $pid ); // 会員番号
286
+
287
+ $p01pt = get_sub_field( 'kzn_p01_num' , $pid ); // 獲得ポイント
288
+
289
+ $p01pz = get_sub_field( 'kzn_p01_money' , $pid ); // 獲得賞金
290
+
291
+ endwhile;
292
+
293
+ endif;
294
+
295
+
296
+
297
+ // 二人目の受賞者情報の取得
298
+
299
+ if ( have_rows( 'kzn_post_person02' , $pid ) ) :
300
+
301
+ while ( have_rows( 'kzn_post_person02' , $pid ) ) : the_row();
302
+
303
+ $p02num = get_sub_field( 'kzn_p02_cnum' , $pid ); // 会員番号
304
+
305
+ $p02pt = get_sub_field( 'kzn_p02_num' , $pid ); // 獲得ポイント
306
+
307
+ $p02pz = get_sub_field( 'kzn_p02_money' , $pid ); // 獲得賞金
308
+
309
+ endwhile;
310
+
311
+ endif;
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+ // 月間合計
320
+
321
+ if( ( $reg_date > $Mstart ) && ( $reg_date <= $Mend ) ) :
322
+
323
+ if( $ss == $p01num ) :
324
+
325
+ $gtMMpt = $gtMMpt + $p01pt;
326
+
327
+ $gtMMpz = $gtMMpz + $p01pz;
328
+
329
+ elseif( ( $p02num ) && ( $ss == $p02num ) ) :
330
+
331
+ $gtMMpt = $gtMMpt + $p02pt;
332
+
333
+ $gtMMpz = $gtMMpz + $p02pz;
334
+
335
+ endif;
336
+
337
+ endif;
338
+
339
+
340
+
341
+ // 年間合計
342
+
343
+ if( ( $reg_date > $Ystart ) && ( $reg_date <= $Yend ) ) :
344
+
345
+ if( $ss == $p01num ) :
346
+
347
+ $gtYYpt = $gtYYpt + $p01pt;
348
+
349
+ $gtYYpz = $gtYYpz + $p01pz;
350
+
351
+ elseif( ( $p02num ) && ( $ss == $p02num ) ) :
352
+
353
+ $gtYYpt = $gtYYpt + $p02pt;
354
+
355
+ $gtYYpz = $gtYYpz + $p02pz;
356
+
357
+ endif;
358
+
359
+ endif;
360
+
361
+
362
+
363
+
364
+
365
+ $resMrows[$ss] = array (
366
+
367
+ 'MMpt' => $gtMMpt,
368
+
369
+ 'MMpz' => $gtMMpz,
370
+
371
+ 'YYpt' => $gtYYpt,
372
+
373
+ 'YYpz' => $gtYYpz
374
+
375
+ );
376
+
377
+
378
+
379
+ endwhile;
380
+
381
+
382
+
383
+ //カスタムクエリをリセット
384
+
385
+ wp_reset_postdata();
386
+
387
+
388
+
389
+ }
390
+
391
+
392
+
393
+ }
394
+
395
+ ?>
396
+
397
+ <h2>抽出データ</h2>
398
+
399
+ <div style="border:3px dashed #c00; padding:2rem;">
400
+
401
+ <pre>
402
+
403
+ <?php print_r($resMrows); ?>
404
+
405
+ </pre>
406
+
407
+ </div>
408
+
409
+ ```
410
+
411
+ ### 試したこと
412
+
413
+
414
+
415
+ - (1)の部分を```foreach文```を使って、```$resMrows```の抽出処理をループさせてみましたが、うまく動作しませんでした。
416
+
417
+ ```php
418
+
419
+ foreach($cLrows as $value){
420
+
421
+ $ss = $value;
422
+
423
+
424
+
425
+ 中略
426
+
427
+
428
+
429
+ $resMrows[$ss] = array (
430
+
431
+     'MMpt' => $gtMMpt,
432
+
433
+     'MMpz' => $gtMMpz,
434
+
435
+     'YYpt' => $gtYYpt,
436
+
437
+     'YYpz' => $gtYYpz
62
438
 
63
439
  );
64
440
 
65
-
66
-
67
- (実行結果)
68
-
69
- Array
70
-
71
- (
441
+ }
72
-
73
-     [会員番号] => Array
442
+
74
-
75
-       (
443
+
76
-
77
-       [class] => 所属
78
-
79
-       [name] => 氏名
80
-
81
-       [pos] => 役職
82
-
83
- )
84
-
85
-
86
-
87
- 省略
88
-
89
-
90
444
 
91
445
  ```
92
-
93
- 【『会員番号だけ』のデータの取得】
94
-
95
- ```Wordpress
96
-
97
- (コード)
98
-
99
-     $pLrows[] = array(
100
-
101
-       'num' => $gtNum
102
-
103
- );
104
-
105
-
106
-
107
- (実行結果)
108
-
109
- Array
110
-
111
- (
112
-
113
-     [0] => Array
114
-
115
-       (
116
-
117
-       [num] => 会員番号
118
-
119
- )
120
-
121
-
122
-
123
- 省略
124
-
125
-
126
-
127
- ```
128
-
129
- **【集計結果の取得】**
130
-
131
- ```WordPress
132
-
133
- (コード)
134
-
135
- $resMrows[会員番号] = array (
136
-
137
-     'MMpt' => $gtMMpt,
138
-
139
-     'MMpz' => $gtMMpz,
140
-
141
-     'YYpt' => $gtYYpt,
142
-
143
-     'YYpz' => $gtYYpz
144
-
145
- );
146
-
147
-
148
-
149
- (実行結果)
150
-
151
- Array
152
-
153
- (
154
-
155
- [会員番号] => Array
156
-
157
- (
158
-
159
- [MMpt] => 0.5
160
-
161
- [MMpz] => 250
162
-
163
- [YYpt] => 258
164
-
165
- [YYpz] => 161250
166
-
167
- )
168
-
169
-
170
-
171
- 省略
172
-
173
-
174
-
175
- ```
176
-
177
-
178
-
179
- ### 試したこと
180
-
181
-
182
-
183
- - (1)の部分を```foreach文```を使って、```$resMrows```の抽出処理をループさせてみましたが、うまく動作しませんでした。
184
-
185
- ```php
186
-
187
- foreach($cLrows as $value){
188
-
189
- $ss = $value;
190
-
191
-
192
-
193
- 中略
194
-
195
-
196
-
197
- $resMrows[$ss] = array (
198
-
199
-     'MMpt' => $gtMMpt,
200
-
201
-     'MMpz' => $gtMMpz,
202
-
203
-     'YYpt' => $gtYYpt,
204
-
205
-     'YYpz' => $gtYYpz
206
-
207
- );
208
-
209
- }
210
-
211
-
212
-
213
- ```