###前提・実現したいこと
現在phpで、選手成績一覧を作成しています。
※ブラウザ上に全選手の成績一覧を表示し、よろしければCSVで保存という形です。
実現したいことは、選手の番号が重複している場合(配列内部で)は、成績を合算して表示したいのです。
###発生している問題・エラーメッセージ
発生している問題は、同じ番号、同じ名前の人が2回出てきてしまいます。
※データの内容は異なるため、データを合算したいです。
※配列の中身は以下のような形です。
array(7) { ["toban"]=> string(4) "4089" ["name"]=> string(12) "山田太郎" ["SG"]=> int(0) ["G1"]=> int(0) ["G2"]=> int(0) ["G3"]=> int(0) ["GN"]=> int(1) } array(7) { ["toban"]=> string(4) "3907" ["name"]=> string(9) "田中太郎" ["SG"]=> int(0) ["G1"]=> int(1) ["G2"]=> int(0) ["G3"]=> int(0) ["GN"]=> int(0) }array(7) { ["toban"]=> string(4) "3070" ["name"]=> string(12) "山本太郎" ["SG"]=> int(0) ["G1"]=> int(0) ["G2"]=> int(0) ["G3"]=> int(0) ["GN"]=> int(1) } array(7) { ["toban"]=> string(4) "4089" ["name"]=> string(12) "山田太郎" ["SG"]=> int(0) ["G1"]=> int(0) ["G2"]=> int(0) ["G3"]=> int(0) ["GN"]=> int(1) }
※山田太郎さんが2人いるのですが、tobanが重複していたら合算して、表示したいと思っています。
→同じtobanで名前がこのなる人は存在しません。
###現在(該当)のソースコード
// 結果配列 $result = array(); // 全ての要素について一つずつ取り出して実行する foreach ($xml as $x){ // キー名をセット $keyValue = $x->toban . $x->name; if (!isset($result[$keyValue])) { // 同じ toban, name の要素が存在しないので新たに設定する $result[$keyValue] = array( 'toban'=>preg_replace("/( | )/", "", $x->toban) , 'name'=>preg_replace("/( | )/", "", $x->name), 'SG'=>0, 'G1'=>0, 'G2'=>0, 'G3'=>0, 'GN'=>0, ); } if ($x->grade == 'SG') { $result[$keyValue]['SG']++; } elseif ($x->grade == 'GⅠ') { $result[$keyValue]['G1']++; } elseif ($x->grade == 'GⅡ') { $result[$keyValue]['G2']++; } elseif ($x->grade == 'GⅢ') { $result[$keyValue]['G3']++; } elseif ($x->grade == '一般') { $result[$keyValue]['GN']++; } print '<table border="1">'; print '<tr> '; print '<td> 登番 </td>'; print '<td> 選手名 </td>'; print '<td> SG回数 </td>'; print '<td> G1回数 </td>'; print '<td> G2回数 </td>'; print '<td> G3回数 </td>'; print '<td> 一般回数 </td>'; print '</tr>'; print '<tr>'; /* 登番 */ print'<td>' .$result[$keyValue]['toban'] .'</td>'; /*選手名 */ print'<td>' .$result[$keyValue]['name'] .'</td>'; /* SG */ print'<td>' .$result[$keyValue]['SG'] .'</td>'; /* GⅠ */ print'<td>' .$result[$keyValue]['G1'] .'</td>'; /* GⅡ */ print'<td>' .$result[$keyValue]['G2'] .'</td>'; /* GⅢ */ print'<td>' .$result[$keyValue]['G3'] .'</td>'; /* 一般 */ print'<td>' .$result[$keyValue]['GN'] .'</td>'; print '</tr>'; print '</table>';
になっています。
※解決したいことが、tobanが重複している選手のデータを合算して表示したいです。
よろしければアドバイスをお願い致します。
●追記:全コード●
<?php //★覧取得★ if($xml = @file_get_contents("WEB上のURL")){ $xml = simpleXML_load_string($xml); $xml = (array)($xml->table); $xml = (array)($xml["record"]); } ?> <!doctype html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>csvファイル</title> <style> table { border-collapse: collapse; } td { border: 1px solid #333; text-align:center; } </style> </head> <body> <?php echo "<b>【↓内容はこちら↓】</b><hr><br>";?> <?php ``` // 結果配列 $result = array(); // 全ての要素について一つずつ取り出して実行する foreach ($xml as $x){ // キー名をセット $keyValue = $x->toban . $x->name; if (!isset($result[$keyValue])) { // 同じ toban, name の要素が存在しないので新たに設定する $result[$keyValue] = array( 'toban'=>preg_replace("/( | )/", "", $x->toban) , 'name'=>preg_replace("/( | )/", "", $x->name), 'SG'=>0, 'G1'=>0, 'G2'=>0, 'G3'=>0, 'GN'=>0, ); } if ($x->grade == 'SG') { $result[$keyValue]['SG']++; } elseif ($x->grade == 'GⅠ') { $result[$keyValue]['G1']++; } elseif ($x->grade == 'GⅡ') { $result[$keyValue]['G2']++; } elseif ($x->grade == 'GⅢ') { $result[$keyValue]['G3']++; } elseif ($x->grade == '一般') { $result[$keyValue]['GN']++; } /*確認用*/ print '<pre>'; var_dump($result[$keyValue]); print '</pre>'; print '<table border="1">'; print '<tr> '; print '<td> 登番 </td>'; print '<td> 選手名 </td>'; print '<td> SG回数 </td>'; print '<td> G1回数 </td>'; print '<td> G2回数 </td>'; print '<td> G3回数 </td>'; print '<td> 一般回数 </td>'; print '</tr>'; print '<tr>'; /* 登番 */ print'<td>' .$result[$keyValue]['toban'] .'</td>'; /*選手名 */ print'<td>' .$result[$keyValue]['name'] .'</td>'; /* SG */ print'<td>' .$result[$keyValue]['SG'] .'</td>'; /* GⅠ */ print'<td>' .$result[$keyValue]['G1'] .'</td>'; /* GⅡ */ print'<td>' .$result[$keyValue]['G2'] .'</td>'; /* GⅢ */ print'<td>' .$result[$keyValue]['G3'] .'</td>'; /* 一般 */ print'<td>' .$result[$keyValue]['GN'] .'</td>'; print '</tr>'; print '</table>'; } ?> </body> </html>
回答2件
あなたの回答
tips
プレビュー