2017-10-11 41 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循環的所有迭代。