数组迭代中的Echo会覆盖先前的echo(PHP)

时间:2011-10-23 20:11:28

标签: php html arrays

目前我这样做:

$lines = file('data/index');
    foreach ($lines as $value)
    list($title, $location) = explode("|", $value);
    echo '<div id="entry"><a href="'.$location.'">'.$title.'</a></div>';

data/index的内容是:

This is a test post|http://google.com 
Another test post|http://google.com

但是,它只打印出该文件的最后一行。几乎每个“回声”都被新的覆盖。我显然没有正确地做到这一点。为什么它不起作用,我怎样才能让它以我想要的方式运作?

3 个答案:

答案 0 :(得分:6)

在您的代码中,只有第三行是循环的一部分。如果要在循环中同时包含两个语句,则必须创建一个块:

foreach ($lines as $value) {
    list($title, $location) = explode("|", $value);
    echo '<div id="entry"><a href="'.$location.'">'.$title.'</a></div>';
}

此外,应避免使用PHP echo HTML。您应该将PHP嵌入到HTML中。它使您的代码,尤其是您的HTML标记更易于维护,并且不易出错。

参考foreach

答案 1 :(得分:4)

你需要花括号{}。没有它们,只有下一行在循环后迭代。因此,只有你的list()被迭代。

foreach ($lines as $value)
{ // <-- Important
    list($title, $location) = explode("|", $value);
    echo '<div id="entry"><a href="'.$location.'">'.$title.'</a></div>';
} // <-- Important

答案 2 :(得分:3)

你有:

foreach ($lines as $value)
list($title, $location) = explode("|", $value);
echo '<div id="entry"><a href="'.$location.'">'.$title.'</a></div>';

只有列表部分位于foreach循环中。你需要:

foreach ($lines as $value)
{
    list($title, $location) = explode("|", $value);
    echo '<div id="entry"><a href="'.$location.'">'.$title.'</a></div>';
}