【问题标题】:Does the function get called for every iteration of foreach loop when used it instead of an predefined array in a foreach loop?当使用它而不是 foreach 循环中的预定义数组时,是否会为 foreach 循环的每次迭代调用该函数?
【发布时间】:2017-10-11 18:22:06
【问题描述】:

考虑下面的代码 sn-p :

<!DOCTYPE html>
<html>
  <head>
    <style>
      table, th, td {
        border: 1px solid black;
        border-collapse: collapse;
      }
      th, td {
        padding: 5px;
      }
    </style>
  </head>
  <body>    

    <table>
      <tr>
        <td>Filter Name</td>
        <td>Filter ID</td>
      </tr>

      <?php
        foreach (filter_list() as $id =>$filter) {
          echo '<tr><td>' . $filter . '</td><td>' . filter_id($filter) . '</td></tr>';
        }
      ?>

    </table>    
  </body>
</html>

通常在 foreach 循环中,使用现有数组进行迭代。 但在上面的代码中,不是在 foreach 循环中使用现有数组,而是调用了一个返回数组的内置函数。

那么,我的问题是函数 filter_list() 是否会在每次循环迭代时被调用?

如果是,那么 foreach 循环如何设法考虑上一次迭代的下一个键值对?

如果不是,那么它为什么以及如何工作?

另外,请告诉我这是一种正确的编码方式吗?

此代码是否足够高效并遵循标准编码实践?

谢谢。

【问题讨论】:

    标签: php arrays function loops foreach


    【解决方案1】:

    filter_list() 只会被调用一次,它的返回值会暂时存储在内存中,然后继续迭代。

    这样做很好 - 如果您在代码中的其他地方需要 filter_list() 的结果,您应该将其存储在一个变量中,以便以后不需要重新执行。

    【讨论】:

    • true,这也可能导致在更改数组结构时发生一些奇怪的事情。过去玩得很开心,就像鬼副本一样……哈哈
    【解决方案2】:

    函数 filter_list() 将仅在第一次迭代中被调用,返回的值将存储在缓冲区中,该缓冲区将在该 foreach 循环的所有迭代中使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2019-01-21
      • 2011-09-07
      • 2023-04-06
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多