質問編集履歴

2

追記

2019/02/05 13:25

投稿

love_kinniky
love_kinniky

スコア22

test CHANGED
File without changes
test CHANGED
@@ -168,21 +168,113 @@
168
168
 
169
169
  ###【考えたコード】
170
170
 
171
+ 追記:質問時のコードが支離滅裂であったので、papinianus様から質問内容に沿った形でご修正頂きました。
172
+
171
173
  ```php
172
174
 
173
175
  <?php
174
176
 
175
177
  /*
176
178
 
179
+ 配列
180
+
181
+ - 同じ日付で 'adtion' の値は重複しない ('2019-01-02'に'escape'が2つあるとかは無い)
182
+
183
+ - 'time' と 'id' は同じ数(いつ誰がやったかを示す)
184
+
185
+ - 'page' は配列3つずつ増えていく(ページ分割に使う)
186
+
187
+ */
188
+
189
+ $array = array(
190
+
191
+ '2019-01-02'=> array(
192
+
193
+ array(
194
+
195
+ 'action'=>'escape',
196
+
197
+ 'dialogue'=>'覚えてやがれー!',
198
+
199
+ 'time'=>array('2019-01-02 18:00:00.000','2019-01-01 13:00:00.000'),
200
+
201
+ 'last_update'=>'2019-01-02 18:00:00.000',
202
+
203
+ 'id'=>array('9','1'),
204
+
205
+ 'page'=>'1',
206
+
207
+ ),
208
+
209
+ array(
210
+
211
+ 'action'=>'attack',
212
+
213
+ 'target'=>'6',
214
+
215
+ 'time'=>array('2019-01-02 15:00:00.000','2019-01-02 01:00:00.000'),
216
+
217
+ 'last_update'=>'2019-01-02 15:00:00.000',
218
+
219
+ 'id'=>array('14','8'),
220
+
221
+ 'page'=>'1',
222
+
223
+ ),
224
+
225
+ ),
226
+
227
+ '2019-01-01'=> array(
228
+
229
+ array(
230
+
231
+ 'action'=>'propose',
232
+
233
+ 'dialogue'=>'たこ焼きはいかがでしょうか?',
234
+
235
+ 'time'=>array('2019-01-01 15:00:00.000','2019-01-01 01:00:00.000'),
236
+
237
+ 'last_update'=>'2019-01-01 15:00:00.000',
238
+
239
+ 'id'=>array('36','5'),
240
+
241
+ 'page'=>'1',
242
+
243
+ ),
244
+
245
+ array(
246
+
247
+ 'action'=>'attack',
248
+
249
+ 'target'=>'7',
250
+
251
+ 'time'=>array('2019-01-01 16:00:00.000','2018-12-31 22:00:00.000','2018-12-25 12:00:00.000'),
252
+
253
+ 'last_update'=>'2019-01-01 16:00:00.000',
254
+
255
+ 'id'=>array('1','15','3'),
256
+
257
+ 'page'=>'2', // 4つ目の配列なので2になる
258
+
259
+ ),
260
+
261
+ ),
262
+
263
+ );
264
+
265
+
266
+
267
+ /*
268
+
177
269
  idをリストで出力するための関数
178
270
 
179
271
  */
180
272
 
181
- function echo_list_id(){
273
+ function echo_list_id($array/* //here 追加*/){
182
-
274
+
183
- foreach ($array as $key => $k['id']) {
275
+ foreach ($array['id'] as $id) { //here
184
-
276
+
185
- echo '<li>'.$k['id'].'番さん<li>';
277
+ echo '<li>'.$id.'番さん</li>'; //here
186
278
 
187
279
  }
188
280
 
@@ -196,83 +288,87 @@
196
288
 
197
289
  */
198
290
 
199
- function echo_list_content($page){
291
+ function echo_list_content($array/* //here $pageはやめた*/, $page = "1" /* //here 追加*/){
200
292
 
201
293
  // リスト出力
202
294
 
203
- echo '<ul>';
204
-
205
- foreach ($array as $key => $k) {
206
-
207
- $date = substr($k['last_update'], 0, strcspn($k['last_update'],' ')); // 日付だけ取得
208
-
209
- // 該当ページの配列だけ出力する
210
-
211
- if( $k['page'] == $page ){
212
-
213
- // attackの場合
214
-
215
- if( $k['action'] == 'attack' ){
216
-
217
- echo '<li>';
218
-
219
- echo '<p>'.$k['target'].'番さんがattackされました!</p>';
220
-
221
- echo '<p>attackした人の一覧です。</p>';
222
-
223
- echo '<ul>'.echo_list_id().'</ul>';
224
-
225
- echo '<p>'.$date.'</p>';
226
-
227
- echo '</li>';
228
-
229
- }
230
-
231
- // escapeの場合
232
-
233
- if( $k['action'] == 'escape' ){
234
-
235
- echo '<li>';
236
-
237
- echo '<p>escapeした人の一覧です。</p>';
238
-
239
- echo '<ul>'.echo_list_id().'</ul>';
240
-
241
- echo '<p>'.$k['dialogue'].'</p>';
242
-
243
- echo '<p>'.$date.'</p>';
244
-
245
- echo '</li>';
246
-
247
- }
248
-
249
- // proposeの場合
250
-
251
- if( $k['action'] == 'propose' ){
252
-
253
- echo '<li>';
254
-
255
- echo '<p><a href="'.$k['page'][0].'">'.$k['page'][0].'番</a>さんと<a href="'.$k['page'][1].'">'.$k['page'][1].'番</a>さんがproposeしています。</p>';
256
-
257
- echo '<p>'.$k['dialogue'].'</p>';
258
-
259
- echo '<p>'.$date.'</p>';
260
-
261
- echo '</li>';
262
-
263
- }
264
-
265
- }
266
-
267
- }
268
-
269
- echo '</ul>';
270
-
271
- // 次のページを更新
272
-
273
- $nextpage = $page++;
274
-
275
- setcookie("page", $nextpage);
295
+ echo '<ul>';
296
+
297
+ foreach ($array as $key => $ks) {
298
+
299
+ foreach($ks as $k){ //here
300
+
301
+ $date = substr($k['last_update'], 0, strcspn($k['last_update'],' ')); // 日付だけ取得
302
+
303
+ // 該当ページの配列だけ出力する
304
+
305
+ if( $k['page'] == $page ){
306
+
307
+ // attackの場合
308
+
309
+ if( $k['action'] == 'attack' ){
310
+
311
+ echo '<li>';
312
+
313
+ echo '<p>'.$k['target'].'番さんがattackされました</p>';
314
+
315
+ echo '<p>attackした人の一覧です。</p>';
316
+
317
+ echo '<ul>'.echo_list_id($k).'</ul>';
318
+
319
+ echo '<p>'.$date.'</p>';
320
+
321
+ echo '</li>';
322
+
323
+ }
324
+
325
+ // escapeの場合
326
+
327
+ if( $k['action'] == 'escape' ){
328
+
329
+ echo '<li>';
330
+
331
+ echo '<p>escapeした人の一覧です。</p>';
332
+
333
+ echo '<ul>'.echo_list_id($k).'</ul>';
334
+
335
+ echo '<p>'.$k['dialogue'].'</p>';
336
+
337
+ echo '<p>'.$date.'</p>';
338
+
339
+ echo '</li>';
340
+
341
+ }
342
+
343
+ // proposeの場合
344
+
345
+ if( $k['action'] == 'propose' ){
346
+
347
+ echo '<li>';
348
+
349
+ //here echo '<p><a href="'.$k['page'][0].'">'.$k['page'][0].'番</a>さんと<a href="'.$k['page'][1].'">'.$k['page'][1].'番</a>さんがproposeしています。</p>';
350
+
351
+ echo '<p>'.$k['dialogue'].'</p>';
352
+
353
+ echo '<p>'.$date.'</p>';
354
+
355
+ echo '</li>';
356
+
357
+ }
358
+
359
+ }
360
+
361
+ } //here
362
+
363
+ }
364
+
365
+ echo '</ul>';
366
+
367
+ // 次のページを更新
368
+
369
+ $nextpage = $page++;
370
+
371
+ //setcookie("page", $nextpage); //here 出力後にcookieかいちゃだめやで
276
372
 
277
373
  }
278
374
 
@@ -290,6 +386,6 @@
290
386
 
291
387
  // リスト出力
292
388
 
293
- echo_list_content($page);
389
+ echo_list_content($array);
294
390
 
295
391
  ```

1

不要な部分を削除

2019/02/05 13:25

投稿

love_kinniky
love_kinniky

スコア22

test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,10 @@
1
1
  ###【実現したいこと】
2
2
 
3
- PHPで、次の【対象の配列】を、後述のように【出力】したいです。
3
+ PHPで、次の【対象の配列】を、後述する【目的の出力】したいです。
4
-
5
-
6
-
4
+
5
+
6
+
7
- そのため【考えたコード】について直すべき部分を教えてもらえませんでしょうか?
7
+ そのため【考えたコード】について直すべき部分を教えてもらえませんでしょうか?
8
8
 
9
9
 
10
10
 
@@ -24,8 +24,6 @@
24
24
 
25
25
  - 同じ日付で 'adtion' の値は重複しない ('2019-01-02'に'escape'が2つあるとかは無い)
26
26
 
27
- - 'last_update' の順に並ぶ(新しいのが先頭に来る)
28
-
29
27
  - 'time' と 'id' は同じ数(いつ誰がやったかを示す)
30
28
 
31
29
  - 'page' は配列3つずつ増えていく(ページ分割に使う)
@@ -116,7 +114,7 @@
116
114
 
117
115
 
118
116
 
119
- ###【出力】
117
+ ###【目的の出力】
120
118
 
121
119
  上の【対象の配列】をこのようにしたいです。
122
120