2011-12-14 21 views
0

のphp noobの部分のみを出力します。PHP:ファイルを爆発させ、値が

私は、このテキストファイル(names.txt)にカンマ区切りの名前とコードを付けました。このようになります。

John doe, 123456, 876543 
Mary Ann, 456878 
Ben Anderson, 987554, 097532, 873445 

あなたはそれぞれの名前は私が何をしたいのか10 までの1からレンジングコードの異なる量を持つことができます見ることができるようにされて出力にこの情報がテーブルとして

私はこれを試してみました:

<table> 
<?php 
$file_handle = fopen("names.txt", "rb"); 

while (!feof($file_handle)) { 

$line_of_text = fgets($file_handle); 
$parts = explode(',', $line_of_text); 

echo "<tr>"; 
echo "<td><strong>" . $parts[0] ."</strong></td>"; 
echo "<td>" . $parts[1] . "</td>"; 
echo "<td>" . $parts[2] . "</td>"; 
echo "<td>" . $parts[3] . "</td>"; 
echo "<td>" . $parts[4] . "</td>"; 
echo "<td>" . $parts[5] . "</td>"; 
echo "<td>" . $parts[6] . "</td>"; 
echo "<td>" . $parts[7] . "</td>"; 
echo "<td>" . $parts[8] . "</td>"; 
echo "<td>" . $parts[9] . "</td>"; 
echo "<td>" . $parts[10] . "</td>"; 
echo "</tr>"; 
} 

fclose($file_handle); 

?> 
</table> 

時々$パーツ[]空にして、そこに何も出力していないと私はエラーになりますので、これは動作しません。不定オフセット。 どうすればこのことができ、値があるときに$ parts []を "エコー"するだけですか?

答えて

0

の代わりにあなたのようなすべての部品をecho'ing(10行)を知っている、あなたはこのような何かでそれを置き換えることができます:

for($i = 1; $i <= 10; $i++) { 
    echo '<td>' . (!empty($parts[$i]) ? $parts[$i] : '') . '</td>'; 
} 

それが何をするのか:ループ10時間とエコーは常に。その内部では、その反復のための$ parts []が空でないかどうかをチェックし、そうでなければそれをエコーし​​ます。それ以外は何もエコーしません。

あなたはまだすべてをそこに置いてください。そうしないと、テーブルが壊れてしまいます(エンドユーザにとっては奇妙に見えます)。

+0

インデックスが存在しないため、 'empty()'はまだ警告を受けます。ここに 'isset()'が必要です。 – PiTheNumber

+0

これは完全に動作します – MagnusGaarde

+0

突然コード番号(10)が変わるとどうなりますか? PHPコードを書いて、最大値をチェックし、それを変数として設定します: for($ i = 1; $ i <= $ maxvalues; $ i ++) { エコー '​​'。 (!empty($ parts [$ i])?$ parts [$ i]: '')。 ''; } – MagnusGaarde

0
while (!feof($file_handle)) 
{ 
    $line_of_text = fgets($file_handle); 
    $parts = explode(',', $line_of_text); 

    // line not empty? 
    if (isset($parts[0]) && !empty($parts[0])) 
    { 
    // first line 
    echo '<td>' . $parts[0] . '</td>'; 
    // other lines 
    for($i = 1; $i <= 10; $i++) { 
     // echo with check 
     echo '<td>' . (isset($parts[$i]) ? $parts[$i] : '') . '</td>'; 
    } 
    } 
} 
1

あなたはfgetcsv()

注意を使用することができます:CSVファイルの空行はヌルフィールドを含む配列として返され、エラーとして扱われることはありません。

<table> 
<?php 
$handle = fopen("test.csv", "r"); 
while (($parts = fgetcsv($handle, 1000, ",")) !== FALSE) { 
    echo "<tr>"; 
    echo "<td><strong>" . $parts[0] ."</strong></td>"; 
    echo "<td>" . $parts[1] . "</td>"; 
    echo "<td>" . $parts[2] . "</td>"; 
    echo "<td>" . $parts[3] . "</td>"; 
    echo "<td>" . $parts[4] . "</td>"; 
    echo "<td>" . $parts[5] . "</td>"; 
    echo "<td>" . $parts[6] . "</td>"; 
    echo "<td>" . $parts[7] . "</td>"; 
    echo "<td>" . $parts[8] . "</td>"; 
    echo "<td>" . $parts[9] . "</td>"; 
    echo "<td>" . $parts[10] . "</td>"; 
    echo "</tr>"; 
} 
fclose($file_handle); 
?> 
</table> 
0

undefined offsetエラーはE_NOTICEです。これは無視しても問題ありません。現れてからの通知を防ぐために、使用します。あなたがこれを行うにはしたくない場合は

error_reporting(E_ALL^E_NOTICE); 

、あなたは問題を解決することができますいくつかの方法があります。

$parts = explode(",", $line_of_text.",,,,,,,,,,"); 

常に、少なくとも10頭の部分があることをこのような:1つのトリックは、あなたにexplode行を変更することです。

+0

動作していますが汚れています! ;) – PiTheNumber

+0

これも動作しますが、私はStefandoornのソリューションに固執すると思います。 – MagnusGaarde

0
<table> 
<?php 
$file_handle = fopen("names.txt", "rb"); 

while (!feof($file_handle)) { 

$line_of_text = fgets($file_handle); 
$parts = explode(',', $line_of_text); 

echo "<tr>"; 
echo "<td><strong>" . $parts[0] ."</strong></td>"; 
for($i=1; $i<=10; $i++) { 
    echo "<td>" . $parts[$i] ? $parts[$i] : '' . "</td>"; 
} 
echo "</tr>"; 
} 

fclose($file_handle); 

?> 
</table>