web-dev-qa-db-ja.com

endforeach in loops?

Foreachループを使用するときは括弧を使用します。 endforeachとは何ですか?

50
CyberJunkie

これは主に、ループで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>

versus

<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)フォームを使用すると、脳が解析しやすくなります。通常のスタイルでは、終了}をそのままにしておくと、実際に何を閉じているのかわかりにくくすることができます。

94
Brad Mace

代替構文 の終了ステートメントです。

foreach ($foo as $bar) :
    ...
endforeach;

PHPから抜け出す場合にコードを読みやすくするのに役立ちます。

<?php foreach ($foo as $bar) : ?>
    <div ...>
        ...
    </div>
<?php endforeach; ?>
25
deceze

代替構文として、foreachループを次のように記述できます。

foreach($arr as $item):
    //do stuff
endforeach;

このタイプの構文は通常、phpがテンプレート言語として使用されているときに使用されます

<?php foreach($arr as $item):?>
    <!--do stuff -->
<?php endforeach; ?>
6
acqu13sce

これはどう?

<ul>
<?php while ($items = array_pop($lists)) { ?>
    <ul>
    <?php foreach ($items as $item) { ?>
        <li><?= $item ?></li>
    <?php
    }//foreach
}//while ?>

さらに広く使用されているブレースを引き続き使用でき、同時に読みやすさを向上させることができます。

3
Preecha

それは単なる異なる構文です。の代わりに

foreach ($a as $v) {
    # ...
}

これを書くことができます:

foreach ($a as $v):
    # ...
endforeach;

それらはまったく同じように機能します。それはただのスタイルの問題です。 (個人的には、だれも2番目のフォームを使用するのを見たことはありません。)

3
cdhowie

foreach: ... endforeach;を使用すると、読みやすくなるだけでなく、PHP docsこれが最良の解決策です

2
Omar El Don