1. ホーム
  2. php

[解決済み] endforeach in loops?

2022-02-19 20:42:49

質問

foreachループを使用する際にブラケットを使用しています。endforeachは何のためにあるのですか?

どのように解決するのですか?

主にループで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 の open/close タグと含まれる HTML によってインデントがずれてしまうと (ページを思い通りにするために HTML を特定の方法でインデントする必要があるかもしれません)、ループの中で 代替構文 ( endforeach ) のフォームを使用すると、脳が解析しやすくなります。 通常のスタイルでは、最後の } は、そのままにしておくと、何を閉じているのかわからなくなることがあります。