【问题标题】:Echo in an array iteration overwrites previous echo (PHP)数组迭代中的回声覆盖以前的回声(PHP)
【发布时间】:2011-10-23 20:11:27
【问题描述】:

目前我正在这样做:

$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

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

【问题讨论】:

  • 让我猜猜,你是python背景的?
  • @code_burgar 在这种情况下,他的缩进是正确的;)

标签: php html arrays


【解决方案1】:

在您的代码中,只有第三行是循环的一部分。如果你想让两个语句都在循环中,你必须创建一个块:

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

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

参考foreach

【讨论】:

  • 谢谢,真不敢相信我错过了。我是 PHP 新手
  • @MaxMackie:这个问题不是 PHP 特有的。在大多数其他“基于 C”的语言中也是如此。
  • 我不同意回应 HTML 本身就是不好的风格。
  • @FeliX Kling:针对样式评论,我应该如何正确地遍历文件内容并将其转换为 HTML?
  • @MaxMackie 也许你已经习惯了 Python?在那种语言中,代码的缩进定义了块。
【解决方案2】:

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

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

【讨论】:

  • 下一个语句。如果您在 ) 后错误地输入了分号,则它可能在同一行!
【解决方案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>';
}

【讨论】:

  • 确认!直到现在才看到其他答案。 编辑:Felix King 的回答 +1
猜你喜欢
  • 2016-09-12
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多