有人可以解释我这个循环PHP吗?

时间:2010-06-23 06:28:15

标签: php while-loop

有人可以在循环时解释我吗?

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

我知道它很愚蠢,但很多时候愚蠢的事情会产生很大的不同......

4 个答案:

答案 0 :(得分:4)

$HTTP_GET_VARS是一个不推荐使用的数组,其中包含查询字符串中传递的参数。 each()是一个迭代数组并返回一个数组的函数,该数组由数组“current”元素的键和值组成。 list()是一种语言结构,它将分配给它的数组分解为传递给它的变量。

当到达数组的末尾时,each()返回false值,导致循环退出。

答案 1 :(得分:2)

每个()函数返回给定数组的当前键和值,然后将数组指针(当前项)向前移动一个。

因此,多次调用它是一种按顺序迭代数组中项目的方法,当你到达结尾时,每个()只是停止返回一个值。

列表()不是函数,而是语言构造;它是一次设置多个变量的快捷方式。在发布的示例中,它将$ key设置为each()(当前键)返回的数组中的第一个值,将$ value设置为第二个值(当前值)。

该代码段存在许多问题。

  1. 你应该在使用每个()之前重置数组指针,因为你不应该假设数组指针在这段代码执行时就开始了。
  2. 应将其连接到查询字符串中的值进行转义(例如,通过urlencode())。
  3. 它也留下了分离'&'不必要地在查询字符串末尾添加字符。
  4. $ HTTP_GET_VARS是PHP的弃用功能;它应该用$ _GET替换。
  5. 使用foreach()对数组进行迭代比使用while,list更清晰,更容易阅读,每个都是这样,并且可能更快。

答案 2 :(得分:1)

当您遍历数组时,

each返回包含当前键和值的数组。 list允许您将数组解压缩为多个变量。我发现foreach结构更清晰。

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

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

答案 3 :(得分:1)

循环遍历数组$ HTTP_GET_VARS中的每对HTTP GET参数,将该对的两侧分配给两个变量$ key和$ value。

赋值'返回'它的值,因此,在数组的末尾,each()将返回false,尽管赋值将导致while条件中止。

在循环内部,$ key和$ value中的每一个都附加到字符串$ get_url中,并带有一些格式。