2017-10-11 60 views
-1

考虑下面的代码片断:当foreach循环使用它而不是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循环如何管理考虑下一个键值对以前的迭代?

如果否,为什么以及它如何工作呢?

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

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

谢谢。

回答

5

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

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

+0

是的,这也会导致在更改数组结构时发生一些奇怪的事情。过去有很多乐趣,就像一个幽灵副本......大声笑 – ArtisticPhoenix

1

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

相关问题