我正在阅读一些书中的例子,但我无法理解为什么一个例子的工作方式。在此示例中,数组传递给函数。然后,该函数创建一个包含单独行上所有元素的表。我的问题是重置如何在这个功能中工作?在我的逻辑中,当重置重置$ 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);
?>
答案 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
实际上使指针前进。