endforeach dans les boucles?

j'utilise des crochets lors de l'utilisation des boucles de foreach. Qu'est-ce que endforeach?

43
demandé sur miku 2011-01-05 05:49:16

7 réponses

c'est principalement pour rendre les instructions de début et de fin plus claires lors de la création de HTML dans loops:

<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>

contre

<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>

J'espère que mon exemple est suffisant pour démontrer qu'une fois que vous avez plusieurs couches de boucles imbriquées, et que l'indentation est rejetée par toutes les balises ouvertes/fermées de PHP et le HTML contenu (et peut-être que vous devez indenter le HTML d'une certaine façon pour obtenir votre page comme vous le voulez), le syntaxe (endforeach) le formulaire peut faire c'est plus facile pour ton cerveau de discuter. Avec le style normal, la fermeture } peuvent être laissés à eux-mêmes et rendent difficile de dire ce qu'ils ferment réellement.

82
répondu Brad Mace 2017-09-10 19:20:57

C'est la déclaration finale pour le autre syntaxe:

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

utile pour rendre le code plus lisible si vous sortez de PHP:

<?php foreach ($foo as $bar) : ?>
    <div ...>
        ...
    </div>
<?php endforeach; ?>
24
répondu deceze 2011-01-05 02:51:21

comme une syntaxe alternative, vous pouvez écrire des boucles foreach comme

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

ce type de syntaxe est typiquement utilisé lorsque php est utilisé comme langage de templation comme tel

<?php foreach($arr as $item):?>
    <!--do stuff -->
<?php endforeach; ?>
6
répondu acqu13sce 2011-01-05 02:52:41

C'est juste une syntaxe différente. Au lieu de

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

Vous pouvez écrire ceci:

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

Ils fonctionnent exactement de la même; c'est juste une question de style. (Personnellement, je n'ai jamais vu personne utiliser la deuxième forme.)

3
répondu cdhowie 2011-01-05 02:51:56

Que Diriez-vous de ceci?

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

nous pouvons encore utiliser les accolades les plus utilisées et, en même temps, augmenter la lisibilité.

3
répondu Preecha 2013-03-10 21:36:05

en utilisant foreach:... endforeach; ne rend pas seulement les choses lisibles, il fait aussi moins de charge pour la mémoire comme introduit dans les docs PHP Ainsi, pour les grandes applications, recevoir de nombreux utilisateurs serait la meilleure solution

2
répondu Omar El Don 2015-04-17 04:39:26

Qu'en dites-vous?

<?php
    while($items = array_pop($lists)){
        echo "<ul>";
        foreach($items as $item){
            echo "<li>$item</li>";
        }
        echo "</ul>";
    }
?>
-3
répondu Ressujsiesam 2014-06-05 15:34:34