2010-11-21 16 views
1

基本的な「書式からテキストへのファイル」の作業は、eviteリストタイプのものです。その上にあるすべては、リストの一番下に空の<li></li>が挿入されていることを除いて、うまくいきます。キャリッジリターン区切り記号を使用していて、str_replaceを使用してループからキャリッジリターンを削除しようとしました。しかし、それはかなり機能していません。私はこれに欠けているものがありますか?またはそのバグを取り除く方法を提案します。ここでPHP foreachループ内の余分なリスト項目

は、フォームプロセッサフ​​ァイル

$name = $_POST[ 'name' ]; 
$guests = $_POST[ 'guests' ]; 
$data = "$name $guests\r"; 
$open = fopen("list.txt", "a"); 
fwrite($open, $data); 
fclose($open); 

ここではPHPの出力ファイル

$file = "list.txt"; 
    $open = fopen($file, 'r'); 
    $data = fread($open, filesize($file)); 
    fclose($open); 

    $list = explode("\r", $data); 
    $string = str_replace("\r", "", $list); 

    foreach($string as $value) { 
     echo '<li>'.ucwords($value).'</li>'."\n"; 
    } 

そしてだ任意の助けをいただければ幸いマークアップはPHP出力

<li>Person One 1</li> 
<li>Person Two 4</li> 
<li>Person Three 2</li> 
<li></li> 

からどのように見えるかです。

答えて

2

使用を文字列の末尾にトリムをつけることで、の前に、が爆発します。

$list = explode("\r", trim($data)); 
4

ここでは、空の値に対して防御的にコーディングする一つの方法だ...

foreach($string as $value) 
{ 
    //to be really foolproof, let's trim! 
    $value=trim($value); 

    //only output if we have something... 
    if (!empty($value)) 
    { 
     echo '<li>'.ucwords($value).'</li>'."\n"; 
    } 
} 
+0

すばらしい解決策...たくさんありがとう –

1

str_replace呼び出しを削除し、ちょうど何も含まれない要素、または空白文字だけをスキップ:

foreach($string as $value) { 
    if (!preg_match("/^\\s*$/", $value)) { 
     echo '<li>'.ucwords($value).'</li>'."\n"; 
    } 
} 
関連する問題