使用foreach循环而不是使用myslqli_fetch_array()

时间:2012-03-18 09:39:35

标签: php mysql

好的,所以我知道什么时候这样做:

//connection code;

//query code;

//$result= mysqli_query();

$row= mysqli_fetch_array($result);

创建一个关联数组,其中表中的列名是相应行中数据的键。

然后你可以使用:

while ($row= mysqli_fetch_array($result))
{
//code to echo out table data.
}

我的问题是while循环在每次迭代后如何进入下一行?我以为那是foreach循环的用途?

7 个答案:

答案 0 :(得分:4)

来自http://www.php.net/manual/en/function.mysql-fetch-array.php

  

数组mysql_fetch_array(resource $ result [,int $ result_type = MYSQL_BOTH])   返回与获取的行对应的数组,并将内部数据指针向前移动。

答案 1 :(得分:1)

返回结果集的许多函数通过返回一个可以像以前一样foreach()开启的数组来实现。但情况并非总是如此,特别是对于数据库功能。 mysqli_fetch_array只获取一行,如果没有剩余,则返回布尔值false。这就是循环的工作方式:只要有要处理的行,表达式的计算结果为true

这种结构的原因主要是效率。获取数据库行可能是性能关键操作,并且在某些情况下不需要所有行。在这些情况下,这种方法将提供更多灵活性。逐行获取行也更加内存友好,因为并非所有结果数据都必须立即加载到内存中。

Mysqli实际上有一个函数可以获取数组中的整个结果集:mysqli_fetch_all。您可以foreach()完成此任务。

答案 2 :(得分:1)

mysql_fetch_array只是从mysql查询中获取结果集的下一行,并将该行作为数组返回,如果没有其他行可以获取,则返回false。

while循环不断地从结果集中拉出结果,一直持续到mysql_fetch_array为假。

foreach循环遍历数组的每个值。由于mysql_fetch_array只提取一个结果,因此count($ row)的值每次都为1。

答案 3 :(得分:0)

此部分一次取一行

$row = mysqli_fetch_array($result);

将它放入while循环使它一次获取一行,直到它没有获取一行,因为没有更多的东西被提取。

替代方法是获取所有行,然后使用foreach

循环遍历它们
$rows = mysql_fetch_all($result);
foreach($rows as $row){
    // do something with row
}

为了实现这个目的,你必须让自己成为一个mysql_fetch_all函数,当然它有原始的while循环...

function mysql_fetch_all($result)
{
  $all = array();
  while($thing = mysql_fetch_assoc($result)) {
    $all[] = $thing;
  }
  return $all;
}

答案 4 :(得分:0)

这是因为SQL连接器在结果中存储了查询的当前状态(即要返回的下一个结果行)。

如果你想要一个类似的例子,它就像从文件中读取一样,你可以使用类似的结构:

while ($line = fgets($fp, 1000)) {
    // ...
}

在幕后(并且取决于语言,解释器,编译器等)forwhile本质上会产生相同的代码。不同的是,根据您的代码应该做什么,一种方法可能比另一种方法更具可读性。

以下面两个循环为例。两者都完全一样。

for ($i = 0; $i < 10; $i++) {
    // ...
}

$i = 0;
while ($i < 10) {
    // ...
    $i++;
}

答案 5 :(得分:0)

每次while循环运行时,它都会执行函数mysql_fetch_array并获取下一个结果。它会这样做,直到没有更多的结果显示出来。

答案 6 :(得分:0)

mysql_fetch_array返回与获取的行对应的字符串数组,如果没有更多行,则返回FALSE。如果存在行则获取数据。

我希望这已经回答了你。很难理解你的意思