2012-02-04 13 views
-1

HTMLリンクを含む単一のデータ列を含むテキストファイルからHTMLテーブルを作成する簡単なPHPスクリプトがあります。これは、私が望むように、5または6列にわたって横方向にデータを書き込みます。しかし、私はループのスクリプトを設定し、データリストを完成させるまで、このリストのデータをテーブルに入力して、各テーブルのセルを個別にハードコードする必要はありません。スクリプトがデータを使い果たすまで、5または6列(この特定のテーブルに必要なもの)の各テーブルセルを作成し、次の行などに移動させます。データファイルのデータは定期的に追加されるため、テーブルの固定長は永久にはなりません。後でもう少しHTML書式を追加できるように、echoコマンドを使用しています。複数の列HTMLテーブル単一の列のテキストファイルからPHP

既存のスクリプトは単純で機能しますが、私がしようとしていることをより良い方法で考えることができれば、すべての提案が高く評価されます。

事前のおかげで、スタン...

PHPコードは以下:

<?php 
    $item = @fopen('linklist.txt', "r"); 

    if ($item) { while (!feof($item)) { $lines[] = fgets($item, 4096); } fclose($item); } 

    echo' 
    <TABLE border="1"> 
    <TR> 

    <TD>'.($lines[1]).'</td> 
    <TD>'.($lines[2]).'</td> 
    <TD>'.($lines[3]).'</td> 
    <TD>'.($lines[4]).'</td> 
    <TD>'.($lines[5]).'</td> 
    <TD>'.($lines[6]).'</td> 
    </tr> 
    <TR> 
    <TD>'.($lines[7]).'</td> 
    <TD>'.($lines[8]).'</td> 
    <TD>'.($lines[9]).'</td> 
    <TD>'.($lines[10]).'</td> 
    <TD>'.($lines[11]).'</td> 
    <TD>'.($lines[12]).'</td> 
    </tr> 

    <!-- And So On, And So On, ETC --> 

    </table>' 

    ?> 

答えて

1
<?php 
echo '<table border="1"><tr>'; 
for($i=0; $i<sizeof($lines); $i++) { 
    echo '<td>'.$lines[$i].'</td>'; 
    if(($i+1)%6==0 && $i!=sizeof($lines)-1) echo '</tr><tr>'; 
} 
echo '</tr></table>'; 
?> 

説明:各 "ライン" を通じて

繰り返し、<td>value</td>

を書き込み

回線がマルチ6の6は、値を書いた後、行を閉じて別のものを開きます(最後のものでない限り、ループの後の行も閉じます)。

は(私はあなたが$line[0]に開始するためのものと仮定し、しかし、あなたが本当に$line[1]に開始することを意図している場合、単に行のチェックに+1を外し、$i=0;$i=1;に変更し、擬似的に$i<sizeof$i<=sizeof

+0

こんにちはデイブ、迅速な応答をありがとう。申し訳ありませんが私はあなたに戻ってすぐに戻っていないが、他のものは時々私の時間を引き継ぐ。あなたの答えは素晴らしく、理解しやすいものでした。私はfgetscsの代わりにfgetscsvを使用して、これをマルチカラムcsvファイルで使用するようにしました(ただし、テーブルを出力するためにデータカラムのうちの1つだけを使用しています)。始まった。ちょっと不思議なことに、なぜファイルをロードしない現在の答えと比べて、完全な作業コードを取り出すために答えを編集しましたか?もう一度ありがとう、Stan – Stan

+0

Stan - コードの一部を削除しましたが、変更しませんでした。反復する必要はないと考え、答えを読みやすくしました。 – Dave

0

を変更しますコード...

x = 0 
echo '<TABLE border="1">' 
For each $line in $lines { 
    x = x + 1 
    if x = 1 { 
    echo '<TR>' 
    } 
    echo <TD>'.($line).'</TD> 
    if x = 6 { 
    echo '</TR>' 
    x = 0 
    } 
} 
echo '</TABLE>' 

注$ラインの配列要素の値を保持するために$ラインオブジェクトを使用する。

HTH

+0

こんにちはモフィリー、すばやい返信をありがとう。申し訳ありませんが私はあなたに戻ってすぐに戻っていないが、他のものは時々私の時間を引き継ぐ。申し訳ありませんが、ここでは新しく、用語「疑似コード」は理解できません。とにかくお返事ありがとうございます。 – Stan

+0

偽のコードは、この例がアルゴリズム的に正しい(うまくいけば)が、特定のプログラミング構文(または好きな場合は "言語")で表現されていないことを意味します。お客様の理解が不足しています。擬似コードは、私のコメントに投票してはならない。 – Mophilly

+0

こんにちはモフィリー、私は最後にこの質問に訪れて以来、しばらくしていますが、私はあなたにダウン投票をした人ではないと私は信じています。 (私は誤解されるかもしれませんが、少なくとも私はそうは思わないかもしれません)私はこのボードの下投票のシステムが好きではありません。それはかすかな空気を作り出しているようだ。私は特に私を助けようとしている人に投票していません。ちょうど誰かが私に何か理由のために私の元の質問の下投票を与えたように???誰かが不平を言うと、私は彼らに理由を与えることが求められるべきだと思う。 – Stan

0

あなたはループを使用する場合は、あなたも有益であるかもしれない、メモリにファイル全体を読んで回避できます

<?php 

$item = @fopen('linklist.txt', "r"); 
if ($item) { 
    echo'<TABLE border="1">'; 
    $i=0; 
    $lines=array(); 
    while (!feof($item)) { 
    $line[] = fgets($item, 4096); 
    $i++; 
    if ($i==6) { 
     echo "<tr>"; 
     echo '<TD>'.($lines[0]).'</td>'; 
     echo '<TD>'.($lines[1]).'</td>'; 
     echo '<TD>'.($lines[2]).'</td>'; 
     echo '<TD>'.($lines[3]).'</td>'; 
     echo '<TD>'.($lines[4]).'</td>'; 
     echo '<TD>'.($lines[5]).'</td>'; 
     echo "<tr>"; 
     $i=0; 
     $lines=array(); 
    } 
    } 
    echo '</table>'; 
    fclose($item); 
} 

?> 
+0

こんにちは、Eugen、すばやい返信をありがとう。申し訳ありませんが私はあなたに戻ってすぐに戻っていないが、他のものは時々私の時間を引き継ぐ。あなたのコードでいくつかの奇妙な理由で、私が得るすべては、データのない空白のテーブルです。とにかくあなたの考えと返信のためにありがとう、Stan – Stan

1
$lines = chunk_split($lines,6); 
?> 
<TABLE border="1"> 
<? foreach ($lines as $row): ?> 
    <TR> 
    <? foreach ($row as $value): ?> 
    <TD><?=$value?></td> 
    <? endforeach ?> 
    <TR> 
<? endforeach ?> 
</TABLE> 
+0

こんにちはCol.、クイック返信ありがとう。申し訳ありませんが私はあなたに戻ってすぐに戻っていないが、他のものは時々私の時間を引き継ぐ。あなたのコードを試してみると、「構文解析エラー:予期しない構文エラーです。」、 "/td>の中に"; "がありませんでしたか?返信いただきありがとうございます、Stan – Stan

+0

コードに余分な<がありました。 –

関連する問題