endforeach in loops?

2022-08-30 09:55:57

我在使用 foreach 循环时使用括号。endforeach是用来做什么的?


答案 1

这主要是为了让您在循环中创建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}


答案 2

这是替代语法的结束语句:

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

如果您要脱离 PHP,则对于使代码更具可读性非常有用:

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

推荐