Название только если foreach существует - PullRequest
2 голосов
/ 31 июля 2011

У меня есть следующий код:

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

Теперь я хочу добавить что-то вроде этого:

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

в начало вывода, но только если if находится в foreachпункт соблюден.Если ни одно из if не выполнено, я вообще ничего не хочу отображать.

Может ли кто-нибудь помочь мне настроить мой код для достижения этой цели?

Ответы [ 2 ]

2 голосов
/ 31 июля 2011

Как и так?

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 голос
/ 31 июля 2011

Вам необходимо вывести в строку или использовать буферизацию вывода . В следующем примере используется строковый подход:

$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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...