PHP - 将数组传递给函数 - 重置的目的

时间:2012-12-10 16:34:35

标签: php

我正在阅读一些书中的例子,但我无法理解为什么一个例子的工作方式。在此示例中,数组传递给函数。然后,该函数创建一个包含单独行上所有元素的表。我的问题是重置如何在这个功能中工作?在我的逻辑中,当重置重置$ data时,数组返回到第一个元素,表应该无限地显示第一个元素。只是在浏览器中看到结果,我知道这不是真的。但为什么呢?

<?php

    function create_table($data) {
        echo "<table border=\"1\">";
        reset($data); // Remember this is used to point to the beginning 
        $value = current($data);
        while ($value) {
            echo "<tr><td>".$value."</td></tr>\n";
            $value = next($data);
        }
        echo "</table>";
    }
?>

<?php
    $my_array = array('Line one. ','Line two. ','Line three. ');
    create_table($my_array);
?>

7 个答案:

答案 0 :(得分:3)

数组有一个内部指针,指示当前元素的位置。 current()函数获取当前函数,next()移动到下一个项目并获取它。 reset()函数将指针移回开始。

最终,这会浪费函数调用。只使用foreach($data as $value)就足够了,但有更简单的方法:

function create_table($data) {
  echo "<table border=\"1\"><tr><td>".implode("</td></tr><tr><td>",$data)."</td></tr></table>";
}

答案 1 :(得分:3)

重置仅在while循环之外调用一次。因此,每次调用create_table时,它只会重置一次数组。然后,在循环中,有下一个($ data)将指针移动到下一个元素

答案 2 :(得分:2)

我将突出显示循环:

while ($value) {
        echo "<tr><td>".$value."</td></tr>\n";
        $value = next($data);
    }

你看到最后的陈述了吗? next($array)向前移动“指针”,值存储在$value中。当数组指针到达结尾时,next()将返回false,这也将停止循环。

foreach()等构造隐式执行此操作,即重置数组并循环其元素。

答案 3 :(得分:0)

  

为什么[这段代码有效]?

您正在使用current()next()对数组($data)进行迭代。

流量:

  • reset()数组开头
  • 获取current()元素(第一个)
  • 循环while您有$value
    • 转到next()元素

答案 4 :(得分:0)

因为while循环在此行next()中有一个$value = next($data);,它将转到数组中的下一个元素。因此,循环使用current()next()

遍历数组

答案 5 :(得分:0)

因为next将内部数组指针向前移动。 reset用于确保内部数组指针位于开头(即,只是在此函数调用之前调用next或类似的东西),current获取第一个价值。然后,它继续向前移动next

实际上,由于数组不是通过引用传递的,我很确定reset什么都不做,但我不是肯定的。

我根本不会推荐这个,我觉得它有点陈旧;我会用foreach。如果假数值合法地在数组内部,则上述内容甚至不起作用。

答案 6 :(得分:0)

reset()在进入函数时将数组指针设置为开头,以确保它在迭代的数组开始时就开始了。

next()循环中的while实际上使指针前进。