PHP foreach循环中的额外列表项

时间:2010-11-21 20:31:16

标签: php foreach

使用基本的“表单到文本文件”evite list类型的东西。除了它在列表底部插入一个空<li></li>之外,它上面的所有内容都很有效。我正在使用回车分隔符,并尝试使用str_replace从循环中删除回车符。但它不是很有效。我有什么遗漏吗?或任何建议如何删除该bugger。

这是表单处理器文件

$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>

非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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";
    }
}

答案 1 :(得分:2)

在爆炸之前使用修剪来修剪字符串的尾随输入

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

答案 2 :(得分:1)

删除str_replace调用,只跳过不包含任何内容的元素,或只删除空格字符:

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