• ベストアンサー

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
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Javascriptで動的にテーブル表示したい

    下記、 PHPの$title 、 $link 、$description を Javascriptで動的にテーブル表示したいです。 表示したいテーブルをHTMLで書くと、 ※以下の3列、複数行になります。 <TABLE> <TBODY> <TR> <TD width="108" height="100"></TD> <TD width="229" height="100"></TD> <TD width="396" height="100"></TD> </TR> </TBODY> </TABLE> 初心者であるため具体的に書き方を御指導お願いできればと思います。 何卒、よろしくお願い致します。 ----------------------------------- <?php 【省略】 header("Content-type: application/x-javascript"); echo 'document.open();'; // open if ($rs = $rss->get($url_flux_rss)) { for($i=0;$i<$limite;$i++) { $title = mb_convert_encoding($rs['items'][$i]['title'], $mojicode, 'auto'); $link = '<a href="http://xxx">' . $title . '</a><br />'; echo 'document.write(\'' . $link . '\');'; if ($d == 1) { $description = mb_convert_encoding($rs['items'][$i]['description'], $mojicode, 'auto'); echo 'document.write(\'' . $description . '<br /><br /><br />\');'; } } } else { echo 'document.write(\'' . $errormessage . '\');'; } echo 'document.close();'; // close ?>

  • tableのあるセルに無駄な空間が出来てしまいます。

    tableのあるセルに無駄な空間が出来てしまい、全くの足踏み状態で困っています。 3兼4列目(あるセル)の中身が終わるとすぐに3列目、4列目がくっついてくるようにしたいです。 <TABLE border=1> <TBODY> <TR> <TD colSpan=3>あああああああああ</TD> <TD>いいいいい</TD></TR> <TR> <TD rowSpan=2 valign="top">1列目</TD> <TD rowSpan=2 valign="top">2列目<br> 2列目<br>2列目<br>2列目<br>2列目<br>2列目<br>2列目<br> 2列目<br>2列目<br>2列目<br>2列目<br>2列目<br>2列目<br> <br><br><br> </TD> <TD colSpan=2 valign="top"> 3兼4列目 <br> このセルと下の3列目、4列目を近づけさせたいです。<br> ↓この空間をなくす方法を教えてください。 </TD></TR> <TR> <TD valign="top">3列目</TD> <TD valign="top">4列目</TD></TR></TBODY></TABLE> 宜しくお願いします。

    • ベストアンサー
    • HTML
  • txtに入っているデータの全件テーブル表示をする場合

    下記のdata.txt内のデータをphpでtable表示で全件を表示させたいのですが、最初の一件を表示することはできたのですが、あとのデータを同じように表示させる事を試みましたが、できませんでした。 一件目から縦に全件を表示させるにはどうしたらいいのでしょうか? よろしくお願いします。 data.txt------------ 12345,54321,田中,010,1234,5678,青森,2134,6854,山本,020,3210,5439,長崎,57404,74748,清水,030,5673,2865,岡山 ---------------------------------------------- <?php //ファイルオープン $fp = fopen('data.txt','r'); //データの読み込み $data=fgets($fp); //ファイルクローズ fclose($fp); //分割処理 $hairetu = split(',',$data); //出力処理 print("<table BORDER='1'>\n"); print("<tr><td>ID</td><td>パスワード</td><td>名前</td><td>TEL</td><td>住所</td></tr>\n"); print("<tr>\n"); print("<td>".$hairetu[0]."</td>\n"); print("<td>".$hairetu[1]."</td>\n"); print("<td>".$hairetu[2]."</td>\n"); print("<td>".$hairetu[3]."-".$hairetu[4]."-".$hairetu[5]."</td>\n"); print("<td>".$hairetu[6]."</td>\n"); print("<tr>\n"); print("</table>\n"); ?>

    • ベストアンサー
    • PHP
  • TABLEのマスの増やし方

    HTMLのテーブル?について教えて下さい。 ******************************************************************************************************************************* <TABLE class=table_a style="WIDTH: 100%"> <TBODY> <TR> <TD class=table_a_th2>左列</TD> <TD class=table_a_td>中列</TD> <TD class=table_a_td>右列</TD></TR> <TR> <TD class=table_a_th2>左列</TD> <TD class=table_a_td>中列</TD> <TD class=table_a_td>右列</TD></TR> <TR> <TD class=table_a_th2>左列</TD> <TD class=table_a_td>中列</TD> <TD class=table_a_td>右列</TD></TR></TBODY></TABLE> ******************************************************************************************************************************* という記載で、縦3列横3列の表が出来るのですが 表の内容(枠組み)を変更する方法が分かりません。 *********************************************************** <TABLE class=table_a style="WIDTH: 100%"> <TBODY> <TR> <TD class=table_a_th2 rowSpan=2>左列</TD> <TD class=table_a_td>中列</TD> <TD class=table_a_td> <P>右列<BR class=first-child>右列</P> <P>右列</P></TD></TR> <TR> <TD class=table_a_td>中列</TD> <TD class=table_a_td>右列</TD></TR> <TR> ************************************************************* 作成したいのはこのようなイメージのもので 中列と右列を増やして行きたいのです。 どなたか詳しいかたご教授下さい。

    • ベストアンサー
    • HTML
  • 複数のレコードをimplodeでまとめる方法

    ほんと度々すいません…。 http://oshiete1.goo.ne.jp/qa3574682.htmlで一度解決したのですが、私の質問の仕方が悪く、結局実用できなかったので再度質問させてください。 上記URLでやったことに、更にフィールドが増えた場合の記述方法についてです。 table1 【ID|field1】 [1|AAA] [1|BBB] [2|CCC] [3|DDD] [3|EEE] [3|FFF] table2 【ID|field2】 [1|ooo] [2|ppp] [2|qqq] [2|rrr] [3|sss] [3|ttt] ↑構造が同じだけど内容が違うテーブルが5つあります(table1~table5まで)。そしてこれらのテーブルをクエリでは↓ <table> <tr><th>ID</th>   <th>field1</th>   <th>field2</th>   <th>field3</th>   <th>field4</th>   <th>field5</th></tr> <tr><td>1</td>   <td>AAA<br>BBB</td>   <td>ooo</td>   ・・・</tr> <tr><td>2</td>   <td>CCC</td>   <td>ppp<br>qqq<br>rrr</td>   ・・・</tr> <tr><td>3</td>   <td>DDD<br>EEE<br>FFF</td>   <td>sss<br>ttt</td>   ・・・</tr> </table> というように表示するのが理想です。 一応自分で考えましたが、できなかったので…お願いします。 ============================== 一応、前回http://oshiete1.goo.ne.jp/qa3574682.htmlにて頂いた回答をまとめたコードが↓です。 (table1のみの場合だとこうなります)→mr_araki様に感謝しております。 $query = mysql_query($sql); $rows = array(); while ($row = mysql_fetch_assoc($query)) {   if (!isset($rows[$row[ID]])) {      $rows[$row[ID]] = array();   }   $rows[$row[ID]][] = $row[field1]; } echo "<table>\n"; echo "<tr><th>ID</th><th>field1</th></tr>\n"; foreach ($rows as $id => $row) {   echo "<tr><td>" .$id. "</td><td>" .implode('<br>', $row). "</td></tr>\n"; } echo "</table>";

    • ベストアンサー
    • PHP
  • テーブルレイアウト

    テーブルレイアウトで困っています。 <table width="100%" height="100%" border="1"> <tr> <td colspan="2" valign="top" height="100">全体の幅は100%</td> </tr> <tr> <td width="150" valign="top">左のセル<br>幅150</td> <td valign="top">右のセル<br>幅指定なし</td> </tr> </table> これだと問題なく表示されるのですが、 <table width="100%" height="100%" border="1"> <tr> <td colspan="2" valign="top" height="100">全体の幅は100% 少し長い文章を入れる</td> </tr> <tr> <td width="150" valign="top">左のセル<br>幅150</td> <td valign="top">右のセル<br>幅指定なし</td> </tr> </table> このように1列目のセルに長い文章を入れると、2列目の左のセルの幅が勝手に広がってしまいます。 何が原因で、対処法はないでしょうか? Netscape7.1ではこうならないんですが、IE6では勝手に崩れてしまいます。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • テーブル2列目に2番目のデータを引き渡すには?

    お世話になります。 テーブルに入っているデータをweb上にデータを表示させたいのですが、1つ1つのデータを2列で表示させる方法を知ってる方がいらっしゃいましたらご教授お願い致します。 イメージ  【1列目】        【2列目】 ---------------- A市○○町1-1| B市○△町2-1 山田 太郎   |  山田 花子 ---------------- C市○×町3-1| D市△×町5-2 日本 和子   |  日本 一郎  ----------------            :            : と言うような感じで作成したいのです。 以下、作ったサンプルでは、2列目も同じデータになってしまいます(ノ_-。) もちろん、どうしたら2列目のデータが2つ目のデータを引き渡すことができるかプログラムの記述が分からなくて・・・。 2列目は2つ目のデータを引き渡せるようにしたいのですが・・・。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー <table> <% recount = 0 rec.MoveFirst Do While not rec.EOF %> <tr> <td nowrap> 〒<%=left(rec("郵便番号"),3) & "-" & right(rec("郵便番号"),4)%><br> <%=rec("現居所1")%><br><%=rec("現居所2")%><br> <%=rec("氏名")%> </td> <td nowrap>〒<%=left(rec("郵便番号"),3) & "-" & right(rec("郵便番号"),4)%><br> <%=rec("現居所1")%><br><%=rec("現居所2")%><br> <%=rec("氏名")%> </td> </tr> <% recount = recount + 1 rec.MoveNext Loop rec.Close %> </table> -------------------------------- どなたか分かる方いらっしゃいましたら是非、宜しくお願い致します。

  • テーブルの行の高さを指定する時全てのtdタグに?

    スタイルシートでテーブルの行の高さを指定する時は、 全てのtdタグにスタイルシートを指定するべきか、 1つだけ(一番左だけ)指定すればいいのかわからないので押してください。 全てのtdタグに指定しても、一つのtdタグに指定しても、結局はその行の高さは指定した高さになります。 コードを書く上でどちらが適切か教えてください。 -------------------------------------------------- <style type="text/css"> td.test {height: 50px;} </style> <body> 1の例<br>(2列ともclass="test"を入れた)<br> <table border=1> <tr><td class="test">1</td><td class="test">2</td></tr> <tr><td class="test">3</td><td class="test">4</td></tr> </table> <br><br> 2の例<br>(一番左の列だけclass="test"をいれた)<br> <table border=1> <tr><td class="test">1</td><td>2</td></tr> <tr><td class="test">3</td><td>4</td></tr> </table> <br><br> 3の例<br>(スタイルシートは何も指定していない)<br> <table border=1> <tr><td>1</td><td>2</td></tr> <tr><td>3</td><td>4</td></tr> </table>

    • ベストアンサー
    • HTML
  • 検索結果を出すためには?(phpとmysql利用で)

    ある画像を押したら、検索結果が出る方法がわかりません。 たとえば、「A」「B」「C」の画像を作成しておき、「A」の画像を押したときにMYSQLで作成したデータベースの中から「A」だけ出す方法がわかりません。(画像からリンクする方法はわかります) 「A」という画像を押すと「akekka.php」を出すように作成したのですが、できません。知恵を貸してください。 <?php $sql= "select * from jyusyo where fuk = '愛媛県'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "<p>該当データがありません。</p>\n"; exit; } else { echo "<table border=\"1\">\n"; echo "<tr>\n"; echo "<th>詳細</th>\n"; echo "<th>登録日<br></th>\n"; echo "<th>府県名<br></th>\n"; echo "<th>住所<br></th>\n"; echo "<th>名前</th>\n"; echo "</tr>\n"; while($row = mysql_fetch_array($result)){ $id = $row["id"]; echo "<tr>"; echo "<a href=\"meisai.php?id=$id\">",$id,"</a>\n"; echo "</td><td>"; echo $row["sho"]; echo "</td><td>"; echo $row["day"]; echo "</td><td>"; echo $row["fuk"]; echo "</td><td>"; echo $row["jyu"]; echo "</td><td>"; echo $row["nam"]; echo "</td></tr>"; } echo "</table>\n"; } ?>

  • phpでのアンケート編集

    社員旅行のアンケート編集のphpです。 (???)のところがどうしてもわからなくて上手く動きません。 どなたか回答お願いします。 <?php session_start(); ?> <html> <head> <body> <font size=5><b>社員旅行アンケート集計</b></font><br><br> <?php $db = mysql_connect("localhost","",""); mysql_select_db("syain_db"); $query = "SELECT * FROM trvl_t"; $result = mysql_query($query); if(mysql_num_rows($result) == 0) print"<br>無し"; else{ for($i = 0;$i <4;$i++) $cnt[$i] = 0; while($row = mysql_fetch_array($result))(???) mysql_close($db); echo "<table border =1>"; echo "<tr><td>旅行先</td><td>希望者数</td></tr>"; for($i=0;$i<4;$i++){ echo "<tr align=center>"; if($i == 0) echo "<td>北海道</td>"; elseif($i == 1) echo"<td>沖縄</td>"; elseif($i == 2) echo"<td>韓国</td>"; elseif($i == 3) echo"<td>香港</td>"; echo "<td>".(???)."</td>"; echo"</tr>"; } echo "</table>"; } ?>

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • PCからBlu-rayで書き込みをする際、フォーマットできない問題に悩まされていますか?富士通FMVのエスプリモFH52で使用しているバッファロードライブ(BRXL-PT6U3)では、フォーマットができないエラーメッセージが表示されてしまいます。Windows10の場合、Blu-rayを初めて使用する際にはフォーマット処理が必要ですが、何度試してもフォーマットが完了できないようです。この記事では、Blu-rayフォーマットの問題を解決する方法について解説します。
  • Blu-rayフォーマットできない問題に直面している人は多いです。富士通FMVのエスプリモFH52を使用していて、バッファロードライブ(BRXL-PT6U3)からの書き込みができないという状況に悩んでいる方もいます。Windows10では、Blu-rayを初めて使用する際にはフォーマット処理が必要ですが、何度試してもフォーマットが完了できないようです。この記事では、Blu-rayフォーマットできない問題の解決方法を詳しく紹介します。
  • 富士通FMVのエスプリモFH52を使用している場合、バッファロードライブ(BRXL-PT6U3)からのBlu-ray書き込みができない状況に悩んでいる人も多いです。Windows10で最初にBlu-rayを使用する際にはフォーマット処理が必要ですが、何度試してもフォーマットが完了できないという問題が発生しています。この記事では、Blu-rayフォーマットできない問題についての解決策を解説します。
回答を見る