2010-06-23 101 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更容易阅读,并且每个像这样,并且可能也更快。
相关问题