循环中的endforeach?

时间:2011-01-05 02:49:16

标签: php loops foreach if-statement

使用foreach循环时我使用括号。什么是endforeach?

7 个答案:

答案 0 :(得分:91)

主要是因为在循环中创建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)为了让您的页面符合您的要求,alternate syntaxendforeach)表单可以让您的大脑更容易解析。使用正常样式,结束}可以自行保留,并且很难说出它们实际关闭的内容。

答案 1 :(得分:25)

这是alternative syntax

的最终陈述
foreach ($foo as $bar) :
    ...
endforeach;

如果你突破PHP,有助于使代码更具可读性:

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

答案 2 :(得分:6)

作为替代语法,您可以像这样编写foreach循环

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

当php被用作模板语言时,通常会使用这种语法

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

答案 3 :(得分:3)

这只是一种不同的语法。而不是

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

你可以这样写:

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

它们的功能完全相同;这只是一种风格问题。 (我个人从未见过有人使用过第二种形式。)

答案 4 :(得分:3)

这个怎么样?

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

我们仍然可以使用更广泛使用的括号,同时提高可读性。

答案 5 :(得分:1)

使用foreach: ... endforeach;不仅可以使内容具有可读性,而且还可以最大限度地减少内存,如PHP文档中所介绍的那样 因此,对于大型应用程序,接收许多用户这将是最佳解决方案

答案 6 :(得分:-3)

那怎么样?

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