在PHP的循环的条件语句中将元素添加到数组

时间:2013-06-17 11:38:04

标签: php while-loop

我有这段代码:

while ($i = $res->fetchArray(SQLITE3_ASSOC))
{
    $items[] = $i;
}

我试着把它整理成:

while ($items[] = $res->fetchArray(SQLITE3_ASSOC));

它看起来非常令人满意,但我现在在数组的末尾得到一个额外的元素(当对fetchArray()的调用返回false时。有没有办法编写这个语句而不在末尾获得额外的元素?

2 个答案:

答案 0 :(得分:2)

如果您使用PDO作为数据库,则应使用fetchAll()方法(documentation

$items = $stmt->fetchAll(PDO::FETCH_ASSOC)

这将为您提供二维关联数组。它的索引从0到n-1,其中n是获取的行数,每行包含一个以列名作为索引的数组。例如:

$items[3]['id']

将包含存储在第4个读取行的id列中的值。

如果您使用的是mysqli_ *,则会mysqli_fetch_all()但不鼓励它,因为它更昂贵而不是mysqli_fetch_array()的循环,或者说文档说的。

如果您使用的是第三方库,请参阅提供的文档。如果没有提供或没有fetchAll等效,则表示质量不佳。删除它并使用原生PDO。

由于您正在使用SQLITE3驱动程序,我建议您查看此页面:SQLITE (PDO),它解释了如何将PDO与SQLITE3一起使用。相信我,这是值得的。很可能你不会长期坚持SQLITE,当你迁移到MySQL或PostgreSQL时,你会感谢我的阅读。

PDO的主要优点是(通常)对用户而言是透明的,关于哪个DB在下面。因此,如果您更改数据库,它不应该破坏您的应用程序,只需更改PDO连接字符串就足够了。

答案 1 :(得分:0)

尝试

while(($item=$res->fetchArray(SQLITE3_ASSOC))&&$items[]=$item);