Как избежать избыточности при условном отображении структуры таблицы HTML - PullRequest
0 голосов
/ 17 апреля 2019

Мой код работает, но я хотел бы знать, как сделать его более элегантным, вместо повторения всего <tr> контента.

Вот код:

<?php if($condition == true) { ?>
            <tr>
                <?php foreach ( $attributes as $attribute_name => $options ) : ?>
                    <td>
                        content
                    </td>
                <?php endforeach; ?>
            </tr>
        <?php } else { ?>
            <?php foreach ( $attributes as $attribute_name => $options ) : ?>
                <tr>
                    <td>
                       content
                    </td>
                </tr>
            <?php endforeach; ?>
        <?php } ?>

Таким образом, если условие true, целое <tr> должно быть вне цикла foreach, в противном случае оно должно быть внутри него. Как это можно сделать без повторения контента?

1 Ответ

0 голосов
/ 17 апреля 2019

Я чувствую, что у вас есть элегантный способ достичь этого без дальнейшего изменения структуры, которая вам нужна, однако, в качестве альтернативы, вы можете использовать несколько if, в зависимости от того, каков результат условия, что избавит от необходимости повторить содержание и помочь вам поддерживать стандарты СУХОЙ.

if($condition) { 
  echo '<tr>';
}

foreach ( $attributes as $attribute_name => $options ) {
  if(!$condition) { 
    echo '</tr>';
  } else { 
    echo '<td>';
  }

  //content

  if($condition) { 
    echo '</td>';
  } else { 
    echo '</tr>';
  }

}

if($condition) { 
  echo '</tr>';
}

Вы также можете использовать троичное ( Как написать троичный оператор PHP ) условие:

echo ($condition) ? '</tr>' : '';

foreach ( $attributes as $attribute_name => $options ) {
  echo (!$condition) ? '<tr>' : '<td>';

  //content

  echo (!$condition) ? '</tr>' : '</td>';

}

echo ($condition) ? '</tr>' : '';
...