• ベストアンサー

txtを読み込んでtableに入れる方法

3 3 村田 6 3 岡田 5 5 木村 1 1 田中 2 1 山田 4 1 江川 1.txtこのタブ区切りファイルで真ん中の列の 335111で 同じ数値の行を<table><td></td></table>に入れたいと思ってます。 <table><td> 3 村田 6 岡田 </td></table> <table><td> 5 木村 </td></table> <table><td> 1 田中 2 山田 4 江川 </td></table> 真ん中の列は同じ数字は上下隣同士以外は来ません。同じ数字は絶対に離れずくっつくことを前提です。1番左列は同数は存在しません。数値関連を比較して行くのかと調べたのですがsortなどしか出て来ず、訳が分からなくなってきました。どのように記述すればいいでしょうか?ご教授ください。 $log=file("1.txt"); for($i=0;$i<count($log);$i++){ echo"<table border=1><td>"; $list=explode("\t",$log[$i]); if($list[0]==$list[1]){//親なら echo"ー親ー<BR>\n"; echo"$list[0]<BR>\n"; echo"$list[2]<BR>\n"; echo"</td></table>"; } if($list[0]!=$list[1]){//子なら echo"ー子ー<BR>\n"; echo"$list[0]<BR>\n"; echo"$list[2]<BR>\n"; } echo"</td></table>"; } これだと親子別々に・・・。

質問者が選んだベストアンサー

  • ベストアンサー
  • suzuki-_-
  • ベストアンサー率77% (152/195)
回答No.1

左の数字はユニークな数にも関わらず、真ん中の数字と 関連性を持った(親部分は等値)不思議な並び順なんですね 今回はとりあえずif分岐さえうまくやれば可能なので、 おおまかな部分は質問者さんの内容を使用し回答します 尚、tableに行を表すtrがなかったので、追記しています $log=file("1.txt"); for($i=0;$i<count($log);$i++){ $list=explode("\t",$log[$i]); if($list[0]==$list[1]){//親なら if($i != 0){//最初の親じゃなかったら echo"</td></tr></table>\n";//前のテーブルを閉じる } echo"<table border=1><tr><td>\nー親ー<BR>\n"; } else {//子なら echo"ー子ー<BR>\n"; } echo"$list[0]<BR>\n"; echo"$list[2]<BR>\n"; } echo"</td></tr></table>";//最後にテーブルを閉じる

bhdkgo
質問者

お礼

PHPの知識が浅い私でも、分かりやすく理解できるプログラム構造を書いてくださってありがとうございました!助かりました!

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

テーブルの表示が妙ですね?trとか抜かして、データはtdに改行なしで いれこむ・・・? 一応わたしなりに解釈して以下のようにしてみましたがいかがでしょう? <?php $handle = fopen("test.csv", "r"); while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) { $datas[]=$data; } fclose($handle); //ここまでがタブ区切りデータの読み込み foreach($datas as $val){ $sortdatas[$val[1]][]=$val[0]." ".$val[2]; } //並べ替える foreach($sortdatas as $array){ $str=""; foreach($array as $val){ $str.=<<<eof <tr> <td>{$val}</td> </tr> eof; } print <<<eof <table border> $str</table> eof; } ?>

bhdkgo
質問者

お礼

なるほど、こういうやり方もあるんですね。 ループ処理が結構多いですけど大変参考になります、 ありがとうございました!