###【実現したいこと】
PHPで、次の【対象の配列】を、後述する【目的の出力】にしたいです。
そのための【考えたコード】について直すべき部分を教えてもらえませんでしょうか?
かなり長いです。すみません。。
###【対象の配列】
php
1<?php 2/* 3配列 4 - 同じ日付で 'adtion' の値は重複しない ('2019-01-02'に'escape'が2つあるとかは無い) 5 - 'time' と 'id' は同じ数(いつ誰がやったかを示す) 6 - 'page' は配列3つずつ増えていく(ページ分割に使う) 7*/ 8$array = array( 9 '2019-01-02'=> array( 10 array( 11 'action'=>'escape', 12 'dialogue'=>'覚えてやがれー!', 13 'time'=>array('2019-01-02 18:00:00.000','2019-01-01 13:00:00.000'), 14 'last_update'=>'2019-01-02 18:00:00.000', 15 'id'=>array('9','1'), 16 'page'=>'1', 17 ), 18 array( 19 'action'=>'attack', 20 'target'=>'6', 21 'time'=>array('2019-01-02 15:00:00.000','2019-01-02 01:00:00.000'), 22 'last_update'=>'2019-01-02 15:00:00.000', 23 'id'=>array('14','8'), 24 'page'=>'1', 25 ), 26 ), 27 '2019-01-01'=> array( 28 array( 29 'action'=>'propose', 30 'dialogue'=>'たこ焼きはいかがでしょうか?', 31 'time'=>array('2019-01-01 15:00:00.000','2019-01-01 01:00:00.000'), 32 'last_update'=>'2019-01-01 15:00:00.000', 33 'id'=>array('36','5'), 34 'page'=>'1', 35 ), 36 array( 37 'action'=>'attack', 38 'target'=>'7', 39 'time'=>array('2019-01-01 16:00:00.000','2018-12-31 22:00:00.000','2018-12-25 12:00:00.000'), 40 'last_update'=>'2019-01-01 16:00:00.000', 41 'id'=>array('1','15','3'), 42 'page'=>'2', // 4つ目の配列なので2になる 43 ), 44 ), 45); 46?>
###【目的の出力】
上の【対象の配列】をこのようにしたいです。
※'page'=>'2'
の配列は次のページとして扱うので、上の配列は4つありますがここの出力は'page'=>'1'
の3つになります。
html
1<ul> 2 <li> 3 <p>escapeした人の一覧です。</p> 4 <ul><li>9番さん</li><li>1番さん</li></ul> 5 <p>覚えてやがれー!</p> 6 <p>2019-01-02</p> 7 </li> 8 <li> 9 <p>6番さんがattackされました。</p> 10 <p>attackした人の一覧です。</p> 11 <ul><li>14番さん</li><li>8番さん</li></ul> 12 <p>2019-01-02</p> 13 </li> 14 <li> 15 <p><a href="36">36番</a>さんと<a href="5">5</a>番さんがproposeしています。</p> 16 <p>たこ焼きはいかがでしょうか?</p> 17 <p>2019-01-01</p> 18 </li> 19<ul>
###【考えたコード】
追記:質問時のコードが支離滅裂であったので、papinianus様から質問内容に沿った形でご修正頂きました。
php
1<?php 2/* 3配列 4 - 同じ日付で 'adtion' の値は重複しない ('2019-01-02'に'escape'が2つあるとかは無い) 5 - 'time' と 'id' は同じ数(いつ誰がやったかを示す) 6 - 'page' は配列3つずつ増えていく(ページ分割に使う) 7*/ 8$array = array( 9 '2019-01-02'=> array( 10 array( 11 'action'=>'escape', 12 'dialogue'=>'覚えてやがれー!', 13 'time'=>array('2019-01-02 18:00:00.000','2019-01-01 13:00:00.000'), 14 'last_update'=>'2019-01-02 18:00:00.000', 15 'id'=>array('9','1'), 16 'page'=>'1', 17 ), 18 array( 19 'action'=>'attack', 20 'target'=>'6', 21 'time'=>array('2019-01-02 15:00:00.000','2019-01-02 01:00:00.000'), 22 'last_update'=>'2019-01-02 15:00:00.000', 23 'id'=>array('14','8'), 24 'page'=>'1', 25 ), 26 ), 27 '2019-01-01'=> array( 28 array( 29 'action'=>'propose', 30 'dialogue'=>'たこ焼きはいかがでしょうか?', 31 'time'=>array('2019-01-01 15:00:00.000','2019-01-01 01:00:00.000'), 32 'last_update'=>'2019-01-01 15:00:00.000', 33 'id'=>array('36','5'), 34 'page'=>'1', 35 ), 36 array( 37 'action'=>'attack', 38 'target'=>'7', 39 'time'=>array('2019-01-01 16:00:00.000','2018-12-31 22:00:00.000','2018-12-25 12:00:00.000'), 40 'last_update'=>'2019-01-01 16:00:00.000', 41 'id'=>array('1','15','3'), 42 'page'=>'2', // 4つ目の配列なので2になる 43 ), 44 ), 45); 46 47/* 48idをリストで出力するための関数 49*/ 50function echo_list_id($array/* //here 追加*/){ 51 foreach ($array['id'] as $id) { //here 52 echo '<li>'.$id.'番さん</li>'; //here 53 } 54} 55 56/* 57配列をリストで出力するための関数 58*/ 59function echo_list_content($array/* //here $pageはやめた*/, $page = "1" /* //here 追加*/){ 60 // リスト出力 61 echo '<ul>'; 62 foreach ($array as $key => $ks) { 63 foreach($ks as $k){ //here 64 $date = substr($k['last_update'], 0, strcspn($k['last_update'],' ')); // 日付だけ取得 65 // 該当ページの配列だけ出力する 66 if( $k['page'] == $page ){ 67 // attackの場合 68 if( $k['action'] == 'attack' ){ 69 echo '<li>'; 70 echo '<p>'.$k['target'].'番さんがattackされました!</p>'; 71 echo '<p>attackした人の一覧です。</p>'; 72 echo '<ul>'.echo_list_id($k).'</ul>'; 73 echo '<p>'.$date.'</p>'; 74 echo '</li>'; 75 } 76 // escapeの場合 77 if( $k['action'] == 'escape' ){ 78 echo '<li>'; 79 echo '<p>escapeした人の一覧です。</p>'; 80 echo '<ul>'.echo_list_id($k).'</ul>'; 81 echo '<p>'.$k['dialogue'].'</p>'; 82 echo '<p>'.$date.'</p>'; 83 echo '</li>'; 84 } 85 // proposeの場合 86 if( $k['action'] == 'propose' ){ 87 echo '<li>'; 88 //here echo '<p><a href="'.$k['page'][0].'">'.$k['page'][0].'番</a>さんと<a href="'.$k['page'][1].'">'.$k['page'][1].'番</a>さんがproposeしています。</p>'; 89 echo '<p>'.$k['dialogue'].'</p>'; 90 echo '<p>'.$date.'</p>'; 91 echo '</li>'; 92 } 93 } 94 } //here 95 } 96 echo '</ul>'; 97 // 次のページを更新 98 $nextpage = $page++; 99 //setcookie("page", $nextpage); //here 出力後にcookieかいちゃだめやで 100} 101 102/* 103ページごとにリスト出力 104*/ 105// ページを取得 106$page = isset($_COOKIE["page"]) ? $_COOKIE["page"] : ""; 107// リスト出力 108echo_list_content($array);
回答2件
あなたの回答
tips
プレビュー