仅当foreach存在时才标题

时间:2011-07-31 00:10:13

标签: php arrays foreach

我有以下代码:

foreach ($model->details as $detail) {
  if ($detail->Title) echo $detail->Title;
  if ($detail->Info) echo '<br />'.$detail->Info;
}

现在我想添加这样的内容:

'<h2>Details</h2>'.'<hr />'

到输出的顶部,但仅当满足foreach子句中的if时。如果没有满足任何一个,我根本不想显示任何内容。

有些人可以帮我调整代码来实现这个目标吗?

2 个答案:

答案 0 :(得分:2)

喜欢这样吗?

foreach ($model->details as $detail) {
    if ($detail->Title && $detail->Info) {
         echo '<h2>Details</h2><hr />';
    }
    if ($detail->Title) echo $detail->Title;
    if ($detail->Info) echo '<br />'.$detail->Info;
}

附录:我可能宁愿做这样的事情,也可以在没有标题时避免不必要的<br />,但只有信息

foreach ($model->details as $detail) {
    $text = array();
    if ($detail->Title) $text[] = $detail->Title;
    if ($detail->Info)  $text[] = $detail->Info;
    if (!empty($text)) {
        echo '<h2>Details</h2><hr />';
        echo implode('<br />', $text);
    }
}

答案 1 :(得分:1)

您需要输出到字符串,或使用output buffering。以下示例使用字符串方法:

$sOutputHtml = NULL;

foreach ($model->details as $detail) {
  if ($detail->Title) $sOutputHtml .= $detail->Title;
  if ($detail->Info) $sOutputHtml .= '<br />'.$detail->Info;
}

if ($sOutputHtml !== NULL) {
  echo '<h2>Details</h2>'.'<hr />' . $sOutputHtml;
}