2010-06-23 39 views
1

有人可以解釋我這個while循環嗎?有人可以解釋我這個while循環爲PHP?

while (list($key, $value) = each($HTTP_GET_VARS)) { 
     $get_url .= $key . '=' . $value . '&'; 
    } 

我知道它的愚蠢,但多次愚蠢的事情,使巨大的差異....

+1

看起來像一個古老的userland實現['http_build_query'(http://de2.php.net/manual/de/function.http-build-query.php)給我 – Gordon 2010-06-23 06:49:34

+0

+1 eggjactly的.. .. :) – 2010-06-23 06:59:57

回答

4

$HTTP_GET_VARS是一個不建議使用的數組,其中包含查詢字符串中傳遞的參數。 each()是一個函數,它遍歷數組並返回由數組的「當前」元素的鍵和值組成的數組。 list()是一種語言結構,它將分配給它的數組分解爲傳遞給它的變量。

當達到數組末尾時,each()返回一個假值,導致循環退出。

1

each返回一個包含當前鍵和值的數組,你遍歷數組。 list可讓您將數組解包爲多個變量。我發現foreach構造更清晰。

foreach ($some_array as $key => $value) 
{ 
    ... 
} 

正如Ignacio所述,HTTP_GET_VARS已被棄用。您可以改用$_GET

+2

是的。在foreach和$ _GET存在之前,這實際上看起來像真的很老的代碼,就像PHP3一樣。儘管如此,我不會爲在PHP上找到一本新的一半的書而感到驚訝。 – cHao 2010-06-23 06:42:22

1

循環遍歷數組$ HTTP_GET_VARS中的每個HTTP GET參數對,按照該順序將該對的邊分配給兩個變量$ key和$ value。

賦值'返回'它的值,因此,在數組末尾,each()將返回false,儘管賦值會導致while條件中止。

在循環內部,$ key和$ value中的每一個都被附加到字符串$ get_url並帶有一些格式。

2

each()函數返回給定數組的當前鍵和值,然後將數組指針(當前項)向前移動一個。

因此,多次調用它是按順序遍歷數組中的項的一種方法,並且當到達最後時,each()會停止返回一個值。

列表()不是函數而是語言結構;這是一次設置多個變量的捷徑。在示例中,它將$ key設置爲由each()(當前鍵)返回的數組中的第一個值,將$ value設置爲第二個值(當前值)。

該代碼段存在許多問題。

  1. 在使用each()之前,您應該重置數組指針,因爲在執行代碼時不應該假定數組指針處於開始位置。
  2. 它連接到一個查詢字符串的值應該被轉義(例如通過urlencode())。
  3. 它也會在查詢字符串的末尾不必要地留下分隔'&'字符。
  4. $ HTTP_GET_VARS是PHP的一個棄用功能;它應該被替換爲$ _GET。
  5. 使用foreach()迭代數組比foreach()更清晰並且比while,list更容易閱讀,並且每個像這樣,並且可能也更快。
相關問題