【问题标题】:While vs. Foreach is there an objective difference? [duplicate]While vs. Foreach 有客观的区别吗? [复制]
【发布时间】:2018-12-06 16:48:05
【问题描述】:

我试图理解 while 和 for each 之间的区别。这两个例子都可以工作,似乎唯一真正的区别是偏好。也许是在这种情况下,但他们的情况是客观上比另一个更好吗?

<?php $rows = get_field('repeater_field_name');
if($rows)
    {
    echo '<ul>';
    foreach($rows as $row)
    {
        echo '<li>sub_field_1 = ' . $row['sub_field_1'] . ', sub_field_2 = ' . $row['sub_field_2'] .', etc</li>';
    }
    echo '</ul>';
} ?>

VS.

<?php if( have_rows('repeater_field_name') ): ?>

    <ul>

    <?php while( have_rows('repeater_field_name') ): the_row(); ?>

        <li><?php the_sub_field('sub_field_1'); ?>,<?php the_sub_field('sub_field_1'); ?>, etc</li>

    <?php endwhile; ?>

    </ul>

【问题讨论】:

  • 当使用布尔值执行时,foreach 不会
  • 要说某件事是否“客观上更好”,您需要定义“更好”的含义。如果您只是在谈论速度,那么您可以自己测试/基准测试。

标签: php for-loop foreach while-loop


【解决方案1】:

两者都是循环结构,正如您所提到的,偏好是选择的主要原因之一。但有时用一种格式比另一种更容易思考。

例如如果我们想无休止地运行循环并根据某些条件中断,那么 while 将是一个更具表现力和可读性的选择。

while (true) {
  if condition {
    break;
  }
}

还有当我们要逐行读取文件直到文件结束时,while操作:

while (($line = fgets($handle)) !== false) {
}

但有时 for 或 foreach 占主导地位,例如循环记录/列表集。

foreach (records as key => value) {
}

另一方面,当底层循环源即将在循环内发生变化时,“while”优于“for”。

【讨论】:

    【解决方案2】:

    这个问题被讨论了很多,这里是著名的答案。

    https://stackoverflow.com/a/12847533/4553685

    另外,我把这个问题重复了

    【讨论】:

    • 如果您认为此问题已在此处提出并回答,请将其标记为重复。这不是答案,很可能会在审核过程中被删除。
    • 我已经标记为重复非常感谢@PatrickQ
    • 我从来不知道这个答案很有名。
    猜你喜欢
    • 2015-05-19
    • 2012-02-16
    • 2014-10-03
    • 2013-05-22
    • 2010-09-26
    • 2020-11-06
    • 2016-05-01
    • 2014-05-20
    相关资源
    最近更新 更多