Это в основном так, чтобы вы могли сделать начальные и конечные операторы более понятными при создании HTML в циклах:
<table>
<? while ($record = mysql_fetch_assoc($rs)): ?>
<? if (!$record['deleted']): ?>
<tr>
<? foreach ($display_fields as $field): ?>
<td><?= $record[$field] ?></td>
<? endforeach; ?>
<td>
<select name="action" onChange="submit">
<? foreach ($actions as $action): ?>
<option value="<?= $action ?>"><?= $action ?>
<? endforeach; ?>
</td>
</tr>
<? else: ?>
<tr><td colspan="<?= array_count($display_fields) ?>"><i>record <?= $record['id'] ?> has been deleted</i></td></tr>
<? endif; ?>
<? endwhile; ?>
</table>
против
<table>
<? while ($record = mysql_fetch_assoc($rs)) { ?>
<? if (!$record['deleted']) { ?>
<tr>
<? foreach ($display_fields as $field) { ?>
<td><?= $record[$field] ?></td>
<? } ?>
<td>
<select name="action" onChange="submit">
<? foreach ($actions as $action) { ?>
<option value="<?= $action ?>"><?= action ?>
<? } ?>
</td>
</tr>
<? } else { ?>
<tr><td colspan="<?= array_count($display_fields) ?>"><i>record <?= $record['id'] ?> has been deleted</i></td></tr>
<? } ?>
<? } ?>
</table>
Надеюсь, моего примера достаточно, чтобы продемонстрировать, что, как только у вас есть несколько слоев вложенных циклов, а отступы отбрасываются всеми тегами открытия / закрытия PHP и содержащимся в нем HTML (и, возможно, вам придется сделать отступ в HTML определенным образом чтобы получить страницу так, как вы хотите), форма альтернативного синтаксиса (endforeach
) может упростить анализ вашего мозга. В обычном стиле закрывающий }
может быть оставлен сам по себе, что затрудняет определение того, что на самом деле закрывается.