0

我试图将整个结果集放入一个数组中,如下所示:

while($myres[]=$result->fetch_array(MYSQLI_ASSOC));

这工作正常,但如果我的结果中有 5 行返回,则数组有 6 个索引,最后一个为空。所以看起来我的数组总是一个索引太大。

我可以使用 num_rows 来循环结果,但这需要我设置自己的计数器并递增它,我喜欢上面行的速记效率,但如何阻止它用空集填充最后一个索引。

这是我使用的替代方法fetch_all,我发现它需要一个特殊的驱动程序,并非所有的 php 服务器都已安装。

4

2 回答 2

1

我只会使用多行

$myres = array();
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
    $myres[] = $row;

但是,如果您必须在没有额外的数组分配行的情况下拥有它

while ($row = $result->fetch_array(MYSQLI_ASSOC) && $myres[] = $row) {

但这或多或少是一样的。

于 2013-06-25T21:10:46.170 回答
0

表达方式

while($myres[]=$result->fetch_array(MYSQLI_ASSOC));

执行以下操作:

  1. 执行$result->fetch_array(MYSQLI_ASSOC)
  2. 将此表达式的结果分配给$myres[],从而将一个条目附加到$myres数组
  3. 将结果$result->fetch_array(MYSQLI_ASSOC)作为条件传递给while语句并确定是否应退出循环。

请注意,在确定是否应退出循环之前将条目附加到$myres数组中。这就是您的额外行的来源。while

以经典方式执行此操作不会损失任何效率:

while ($record = $result->fetch_array(MYSQLI_ASSOC)) {
 $myres[] = $record; 
}
于 2013-06-25T21:16:24.883 回答