当使用foreach循环而不是foreach循环中的预定义数组时,是否会为foreach循环的每次迭代调用该函数?

时间:2017-10-11 18:22:07

标签: php arrays function loops foreach

请考虑以下代码段:

<!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循环如何设法将下一个键值对考虑到上一次迭代?

如果不是,为什么以及如何运作呢?

另外,让我知道这是一种正确的编码方式吗?

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

谢谢。

2 个答案:

答案 0 :(得分:5)

filter_list()只会被调用一次,它的返回值将暂时存储在内存中,并进行迭代。

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

答案 1 :(得分:1)

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