我最近使用了相当多的 PHP,虽然我通常发现它很有趣而且相当轻松,但我担心我可能偶然发现了很多人似乎讨厌它的怪癖之一.
考虑一下:
while($row = mysql_fetch_array($result))
{
//Do something with $row...
}
...其中 $result 是一个 mysql_query,例如:
SELECT name, age FROM people
每次循环执行时,$row 引用返回结果中的不同行。
我从来不知道有一种语言,如果它检查的条件为真, while(... 语句会执行除执行之外的任何操作,而且我可以看到上面的代码是如何做的......但我不能查看 while 循环如何使其迭代获取的数组的索引。
这仅仅是 PHP 的一个奇怪的怪癖,还是 mysql_fetch_array 返回的对象每次被引用时都会递增/拼接自身?
我明白它是如何工作的,所以我可以在我的代码中使用它,但我不明白为什么而且我不喜欢死记硬背 - 如果有人能解释我会非常感谢。
最佳答案
the object returned by mysql_fetch_array increment/splice itself every time it's referenced
您说得对。出于某种原因,它在这个特定函数的手册引用中没有这样说,但让我们看一下非常相似的 mysql_fetch_row
的引用
http://www.php.net/manual/en/function.mysql-fetch-row.php
引用自引用资料:
Returns a numerical array that corresponds to the fetched row and moves the internal data pointer ahead.
内部数据指针向前移动后,再次调用此函数将获取下一行。此行为与 while
本身无关。您也可以在连续的行中多次调用该函数。
这种行为实际上很常见。考虑使用类似于 fread
的 API 从文件中读取。每次阅读时,您都会收到下一个数据 block 。这也是使用内部数据指针(也称为游标)实现的。
关于PHP SQL数组循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14698673/